Laden...

Forenbeiträge von Robin0 Ingesamt 212 Beiträge

09.12.2013 - 12:11 Uhr

Dann lad deine Tablle erst beim Knopfdruck und nicht vorher.

Oder regel das über die #WinForms IsVisible/#WPF Visibility eigenschaft.

09.12.2013 - 12:08 Uhr

Öhm, wenn ich dass jetz richtig verstandenb habe möchtest du das deine ""Connection"-Notes""
immer 2 Feste Child item haben.

Wenn du unterschiedliche Klassen zur darstellung verwendest, leg das doch einfach im Konstuktor fest.


public Connection()
{
   Connections.Add(new Connection(....));
   Connections.Add(new Connection(....));
}

05.12.2013 - 08:24 Uhr

Soweit war ich auchschon XD.
Ich möchte aber das attribut außerhalb des getters und setters auslesen.
Genau da stellt sich mein problem, wie komme ich außerhalb des getters und setters an das Attribut?

04.12.2013 - 16:50 Uhr

Wenn du die Liste mit den doppeltern werten schon hast, kannst du die ja auch einfach begrenzen:

IEnumerable<ElementTyp> Distinct = Liste.AsEnumerable().Distinct();

Und das ganze vereinfacht:

var myCartesianProduct = (from x in Liste
from y in Liste
select new { x, y }).Distinct();

04.12.2013 - 16:30 Uhr

Ich hätte villeicht sagen solln das ich .Net 4 verwende.
(Ich verwende die attribute im grundegenommen eigentlich für die Eigenschaften, hab nur beim rumprobiren auf beides erstmal ein attribut gelegt)

Die sache ist die:
Ich will das das Attribut des elements das für das die Extension angewendet wird, nicht für ein unterelement, ausdiesemgrund kommt man mit dem typen ansich auch nich weiter. Dann könnte ich das Attribut ja auch an die Klasse binden.

04.12.2013 - 15:53 Uhr

puh, ja was soll ich jetz in source und was in value schreiben?
wenn wir mal davon ausgehen das ich das aus GetTarget<T>(this T myObject){} aufrufen werde

04.12.2013 - 15:39 Uhr

Hallo,

Ich möchte gerne den Feldern einer klasse ein Attribut mitgeben:
(*Funktioniert auch soweit)


   public SampleClass
   {
      private int m_Var;
      [Test("Hallo")]
      public int Var
      {
         get{return m_Var;}
         set{m_Var = value;}
      }
      //.
      //.
      //.
   }

[AttributeUsage(AttributeTargets.Field)]
    public class TestAttribute : Attribute
    {
        public string Target = "";

        public SerialisationTargetAttribute(string _Target)
        {
            Target = _Target;
        }
    }

Nun würde ich dieses Attribut gerne in einer in einer Extension auslesen ohne noch weitere werte übergeben zu müssen.
Ich bekomm das so nicht hin


public static class Extensions
{
public static string GetTarget<T>(this T myObject)
{
//---Hier muss ich immer den Parent und den namen des Attributs mitgeben -.-
// (Suboptimal) es würde schon reichen wenn ich den namen schon nichmehr mitgeben muss

//return (Parent.GetType().GetField("Var").GetCustomAttributes(typeof(TestAttribute ),false)[0] as TestAttribute ).Target;

return "";//my z.B. Hallo
}

Danke im vorraus wenn jemand ne gute idee hat.

02.12.2013 - 08:07 Uhr

Dann halten wir fest, es funktioniert nicht, das hatte ich schon befürchtet, dann muss ich mir was anderes überlegen.

Trotzdem danke an alle die sich der Frage angenommen haben. 😃

29.11.2013 - 12:03 Uhr

Ich würd jetz mal grob sagen den Style vom ScrollViewer, da der über die komplette rechte Seite des DataGrid´s geht und dein icon verdecken würde.

29.11.2013 - 11:11 Uhr

Ich glaube ihr habt meine frage nicht richtig verstanden.

Ich suche einen weg in WPF eine eigenschaft zu übergeben, ohne ein DataBinding erstellen zu müssen.

Ob das sinvoll ist oder nicht sei einmal mal dahingestellt.
Ich kann die Validierung auch in einer Funk<in T,out result> veranstalten, und die übergeben, dazu müsste ich aber auch ohne Binding eigenschaften übergeben können.

Die tatsache das ich nicht weiß wie das geht stört mich, aus diesem grund hab ich die frage ja gestellt.

Der grund für die verwendung der Validate klasse ist die hohe widerverwertbarkeit, ich kann die klasse später über ein TFS öffentlich machen und in anderen projekten verwenden. Zudem hab ich somit den Luxus die übersichtlichkeit meines ViewModels zu verbessern.

29.11.2013 - 08:31 Uhr

Ich hätt trotzdem gern gewusst wie ich ne variable ohne binding übergebe. Die angeführte Validation is nur eins von vielen beispielen wo dies hilfreich wär.

29.11.2013 - 08:04 Uhr

Ja, ich weiß das will es deshalb ja nich verwenden.

28.11.2013 - 16:39 Uhr

Das will ich doch die ganzezeit machen, nur würde ich meiner validation gerne eine Liste mitgeben, die sich in meinem ViewModel befindet.

eien DependencyProperty kann ich nicht verwenden, da ich dann von DependencyObject erben müsste, meine Validationsklasse erbt aber schon von ValidationRule.

so sieht meine Validationsklasse aus(unnötiges entfernt)
Der aufruf steht ja schon oben, ich möchte gerne PermissibleValues eine Liste übergeben, die sich in mienem MainviewModel befindet


  class Validation : ValidationRule
    {
        private object _PermissibleValues;
        public object PermissibleValues
        {
            get { return _PermissibleValues; }
            set { _PermissibleValues = value; }
        }

        public static int updateValidates = 0;
        public static void UpdateSource()
        {
            updateValidates++;
        }
        int valUpdateIndex = 0;

        private string _MvvMAddress;
        public string MvvMAddress
        {
            set
            {
                try
                {
                    _MvvMAddress = value;
                    Type _Type = typeof(MainViewModel);
                    PropertyInfo _PInfo = _Type.GetProperty(value);
                    PermissibleValues = _PInfo.GetValue((new MainViewModel()), null);
                }
                catch { }
            }
        }

        private string _Valuepath;
        public string Valuepath
        {
            get { return _Valuepath; }
            set { _Valuepath = value; }
        }

        public Validation(){ }

        public List<object> GetValues(object Val, string PropName)
        {
            List<object> MyList = GetCollection(Val);
            List<object> _out = new List<object>();

            foreach (var item in MyList)
            {
                Type _Type = item.GetType();

                PropertyInfo _PInfo = _Type.GetProperty(PropName);

                _out.Add(_PInfo.GetValue(item, null));
            }

            return _out;
        }

        public List<object> GetCollection(object Val)
        {
            Type _Type = Val.GetType();

            PropertyInfo _PInfo = _Type.GetProperty("Item");

            PropertyInfo _PInfoFieldCount = _Type.GetProperty("Count");
            int FieldCount = (int)_PInfoFieldCount.GetValue(Val,null);

            List<object> _out = new List<object>();

            for (int i = 0; i < FieldCount; i++)
            {
                _out.Add(_PInfo.GetValue(Val, new object[]{i}));  
            }
            
            return _out;
        }


        private StringComparison _StringComparisonType = StringComparison.OrdinalIgnoreCase;
        public StringComparison StringComparisonType
        {
            get { return _StringComparisonType; }
            set { _StringComparisonType = value; }
        }


        public ValidationResult Validate(object value, CultureInfo cultureInfo)
        {

            int index = 0;
            try
            {
                foreach (var item in GetValues(PermissibleValues, Valuepath))
                {
                    if (item.Equals(value))
                        index++;
                }
            }
            catch (Exception e)
            {
                return new ValidationResult(false, "Illegal Input or " + e.Message);
            }

            if (index == 0)
            {
                return new ValidationResult(false, "Request does not exist!");
            }
            if (index == 1)
                return new ValidationResult(true, null);
            if (index > 1)
            {
                return new ValidationResult(false, "Not unique!");
            }


            return new ValidationResult(false, "\t!!!!!\t");
        }
    }

(Eigentlich habe ich mehrere ValidationsFunktionen hab ich aber jetz mal weggelassen, wird sonst zu lang)

28.11.2013 - 14:56 Uhr

Ich kann die IErrorInfo in dem fall ja nicht verwenden, da den wert überprüfen will bevor dieser übernommen wird.
Der Eigenschaftsoperator "set_SelectedTargetPlaceName(string value)" wird vor "get_IDataErrorInfo.this[string columnName]" ausgeführt, was das problem aufwirft, das ich nicht prüfen kann ob der Wert korrekt ist !bevor ich ihn in das Feld "_SelectedTargetPlaceName" schreibe.

Wenn ich im der ValidationResultden wert "false" das Feld "IsValid" eintrage, wird die eigenschaft "set_SelectedTargetPlaceName(string value)" garnichterst aufgerufen.
Mit "get_IDataErrorInfo.this[string columnName]" kan ich den aufruf leider nicht kontrollieren.

Ich will ja nur wissen wie ich eine Eigenschaft ohne eine Bindung übergeben kann. Das wird in anderen fällen sicher auchnoch nützlich sein.

28.11.2013 - 14:10 Uhr

IDataErrorInfo wird erst durchlaufen nachdem der wert in der gebundenen Property gesetzt wurde.
Ich verwende den String der eingegeben wird eigentlich nur als abkürzung, damit der Anwender nicht die ganze Liste durchschauen muss wenn der name 2x vorkommt muss, ich dem Anwender zudem die möglichkeit geben den richtigen per Hand auszuwählen.

Ich hab ne recht große Liste die ich durchlaufe um zu prüfen wie oft der String drinn vorkommt, mir geht es hier auch hauptsächlich um die widerverwendbarkeit der Validation.

Es funktioniert ja wenn ich immer da gleiche ViewModel verwende.
Das möchte ich aber vermeiden.

immoment weise ich "PermissibleValues" noch so zu:


        public string MvvMAddress
        {
            set
            {
                try
                {
                    _MvvMAddress = value;
                    Type _Type = typeof(MainViewModel);
                    PropertyInfo _PInfo = _Type.GetProperty(value);
                    PermissibleValues = _PInfo.GetValue((new MainViewModel()), null);
                }
                catch { }
            }
        }

28.11.2013 - 13:37 Uhr

Hab ich mir schon angeschaut, aber ich hätte den String gern geprüft !bevor ich ihn verwende nicht danach.

28.11.2013 - 13:28 Uhr

Hallo zusammen,

Ich versuche schon länger eine Variable im xaml zu übergeben ohne eine bindung zu erzeugen.

Im DataContext meines Hauptfensters habe ich das VievModel in dem die Liste enthalten ist.

Validation ist eine eigene klasse die von ValidationRule ableitet.
in der Validation möchte ich prüfen ob das Element in einer Liste vorkommt, diese Liste möchte ich an (object)"PermissibleValues" übergeben.
(Damit ich die klasse auch an anderen stellen verwenden kann. Nur leider bekomm ich das nich hin -.-)

Mit MvvMAddress sage ich im moment das die Liste "AllStoragePlaceStocks" heißt, ich lese diese Liste dann aus meinem ViewModel aus.

mit ValuePath geben ich an welche eigenschaft der liste ich vergleiche in disem fall "Name".


        <TextBox x:Name="tbTargetplace">
            <TextBox.Text>
                <Binding Mode="TwoWay"
                         Path="SelectedTargetPlaceName"
                         UpdateSourceTrigger="LostFocus"
                         >
                    <Binding.ValidationRules>
                        <local:Validation MvvMAddress="AllStoragePlaceStocks" Valuepath="Name" PermissibleValues="?" ValidationType="ContainsUniqueString"/>
                    </Binding.ValidationRules>
                </Binding>
            </TextBox.Text>
        </TextBox>

Wie kann eine Liste aus meinem DataContext an PermissibleValues übergeben?

22.11.2013 - 08:41 Uhr

Oder einmal ganz anders gedacht, erstell dir UserControl mit nem Bild und Schrift und hau es in ein FlowLayoutPannel(oderso) rein.

11.11.2013 - 15:23 Uhr

Warum betreibst du soviel aufand, du kanst doch eigentlich einfach das selektierte item aus ListView1 in LV2 kopieren.

Oder direkt vom deinem TreeView in die ListView2.

Du kannst im übrigen den Pfad vom dateinamen trennen indem du folgendes nutzt:

System.IO.Path.GetFileName(string path); //gibt den dateinamen zurück
System.IO.Path.GetDirectoryName(string path); //gibt den pfad zurück

dann kannst du die das Rumgepopel in der foreach sparen.

11.11.2013 - 12:43 Uhr

Bitte schreib mal drunter was du meintest.

Mit ["A*"] knüpfe ich an deine vorrangegangene aussage an zb: [A1] = Aussage 1.1 oder 1.2.

Aussage 1.1: Du willst alle aufgeklappten TreeViewNodes auslesen.
Aussage 1.2: Du willst alle selektierten TreeViewNodes auslesen.

Aussage 2: Du willst pfade erstellen, für jedes element dass auf [A1] zutrifft.

Aussage 3: Die zu erstellenden pfade wählst du mit deiner 2.Listviev aus.

Aussage 4: Die erstellen pfade möchtest du in deiner 1.Listviev anzeigen lassen.

11.11.2013 - 12:34 Uhr

Ich finde ja eigentlich generell wenn ein anderer programmierer sich die mühe macht und die einstellungen ändert, ist dieser selbst schuld wenns nicht funktioniert.

ich würd einfach n attribut [System.Obsolete("Größe nicht verändern!")] dranhängen.

11.11.2013 - 09:53 Uhr

Leg es doch einfach im designer fest, oder stell die min und max werte der größe auf den gleichen wert.

06.11.2013 - 14:55 Uhr

Das finde ich jetz nicht sonderlich schwer zu verstehen:

Du fügst deinen DataGridViev einfach ein KeyDown Event hinzu.

Tipp:

Wenn du :


[DataGridViev].KeyDown +=

geschrieben hast, kannst du im VisualStudio zwei mal Tab drücken, und schon hast du das event erstellt.

Jetzmusst du nurnoch deinen code hineinschreiben.

z.B


[DatagrigViev].Selecteditem.Value.ToString() = "was anderes";  

06.11.2013 - 09:12 Uhr

Dann mach einfach aus "OleDbCommand" --> "MySqlCommand"

Kommt aufs selbe hinaus 😉

Ich weiß jetz nich genau ob es "ExecuteNonQuerry()" unter MySQL gibt, zurnot ersetz es durch "ExecuteReader()".

[EDIT]

Ich seh auch bei dir im Code oben kein "ExecuteReader()" oder sonstiges kann ja sein dass es drinn is.

04.11.2013 - 16:54 Uhr

Funktioniert es denn mit dem Code-Snippet??
Wenn es nicht funktioniert könnte es an den rechteeinstellungen deines MSSQL-Servers liegen.

04.11.2013 - 16:25 Uhr

Ich weiß jetz nich was connection.CreateCommand bewirkt, aber ich glaube da liegt dein fehler

Versuchs mal mit der Methode


        public static int ExecuteNonQuerry(string SQLQuerry)
        {
                    int coutAffectedRows = new OleDbCommand()
                    {
                        Connection = conn //<--Hier deine SQL connection einfügen,
                        CommandText = SQLQuerry
                    }.ExecuteNonQuery();

                    return coutAffectedRows;
         }

04.11.2013 - 11:55 Uhr

Ich weiß nich wo die schwierigkeit bei SelectedIndex liegt:


int OldSelectedIndex = MyDataGrid.SelectedIndex;
//Dein Code hier zwischen packen
MyDataGrid.SelectedIndex = OldSelectedIndex > 0 ? OldSelectedIndex - 1 : 0;


14.10.2013 - 15:40 Uhr

Wie lange das bruacht kommt ja auch immer auf dein sql statement an, villeicht suchst du mal da.

Mit visual studio (2012 zumindest) kannst du dich direkt mit datenbanken verbinden, kopier mal dein qql darein, und schau wielang es da dauert.

11.10.2013 - 16:56 Uhr

Was verändert sich bei dir denn. Das usercontrol- oder das tabControlPannel,
weil das sieht nichso aus als wär das Usercontrol verschoben.

11.10.2013 - 12:42 Uhr

vrl.dataGridView1[ColumnIndex][RowIndex].Value = MyString;

oder

vrl.dataGridView1.Columns[1].Rows[index].Value = MyString;

Ist ganz dir überlassen, was du übersichtlicher findest.

10.10.2013 - 11:24 Uhr

Wiso kannst du nicht auf Datagrid.selectedItems binden, ich hab da keine probleme mit.

Was veruchst du den überhaupt an die eigenscahft zu binden?

10.10.2013 - 11:21 Uhr

Veruchsmal mit object.MemberwiseClone
MSDN-Link:
Object.MemberwiseClone

10.10.2013 - 09:24 Uhr

Ich miente ja auch das du "SuppressFinalize" auf MSMQ anwendest, werweiß inwieweit die mit unmanaged Datentypen oder Pointern arbeiten.

09.10.2013 - 13:12 Uhr

Ich kann auch nur was vermuten, aber es könnte sein das dein pointer z.B von GC(GarbageCollector)entferrnt wurde du kannst den GC explizit sagen dass bestimmte objekte nicht freigegeben werden sollen.

Versuch mal bevor du dein prozess unterbrichst


GC.SuppressFinalize(object obj); 

auf dein objekt anzuwenden.
Jedoch, wenn du dein object mit


GC.ReRegisterForFinalize(object obj); 

nicht wider freigibst blokiert es bis du den PC herrunterfährst den arbeitsspeicher.

ED1IT:
System.GC --> use System;

07.10.2013 - 15:31 Uhr

Kleiner Tipp,
Versuchmal mit F11(Einzelschritt) den programmabschnitt zu Debuggen.

Villeicht fällt die ja dann dein fehler auf.
oder schreib Directory.GetFiles(); in ein array und guck was drinnsteht.

07.10.2013 - 08:50 Uhr

@Th69

ups, mein fehler 😄, ich wusste nichmehr genau wie die eigenschaft heißt die prüft wieviele millisecunden das programm schon laeuft und hab anscheinend die falsche genomen.

Aratar war trotzdem der erste.

07.10.2013 - 08:47 Uhr

Wenn dien statement in die tabelle keine Daten schreibt, schfreibst du entweder keine daten in die strings, oder der INSERT ist falsch, bei fehlern in der schleife wird eig ne fehlermeldung rausgegeben.

04.10.2013 - 15:56 Uhr

Ich bin mir jetz nich sicher ob das so gewollt ist aber denke so könnte mann das lösen:


DECLARE @T TABLE(HEAD varchar(50), VALUE varchar(50));
DECLARE @STR1 varchar(50);
DECLARE @STR2 varchar(50);

DECLARE @I int;
SET @I = 1;
while (SELECT MAX(MyTable.Reihenfolge) FROM MyTable) < @I
BEGIN
SET @I = @I +1;
SET @STR1 = (SELECT MyTable.StraßeName FROM MyTable WHERE MyTable.Reihenfolge = @I);
SET @STR2 = (SELECT MyTable.StraßeTyp FROM MyTable WHERE MyTable.Reihenfolge = @I);
INSERT INTO @T (HEAD, VALUE)
VALUES (@STR1, @STR2 + '505');--Hier Einfach n bisschen mit dem string rumspielen
END

Die Tabelle @T könntest du dann Pivotisieren.

04.10.2013 - 12:29 Uhr

Ich hab das ganze mal auf die performance getestet, und "Aratar" war am schnellsten mit der lösung, somit ist er der Gewinner 😃.

(Das gilt natürlich nur wenn die beiden zahlen zusammengenommen nicht größer als 32bit sind.
In dem Fall sind die anderen Lösungen besser)[Hatte ich aber in der aufgabe nicht berüksichtigt]

EDIT:
Siehe Th69, habe die falsche funktion genommen um die geschwindigkeit zu testen.
/EDIT
Test:


            int a = 15;
            int b = 20;

            for (int i = 0; i < 100000000; i++)
            {
                a = a + b;
                b = a - b;
                a = a - b;

            }

            Console.WriteLine(System.Environment.TickCount);
            Console.Read();

30.09.2013 - 14:00 Uhr

Noch ein konzeptioneller vorschlag, wenn du Armor, Attack... als int speicherst ist es grundlegend besser, Armor.ToString().PadLeft() zu verwenden, da du mit (Armor as string) dem Compiler quasi nur sagst das Armor ein string ist [das kann zu fehlern führen] und mit *.ToString() den wert in ein string convertierst.

der operator as ist dann am besten zu gebrauchen wenn du den richtigen typen eines objekt kennst es aber in z.B. Einem object ist, hilfreich bei Events.

wie bei:


Button.Click += new RoutedEventHandler(delegate(object sender, RoutedEventArgs e)
{
(sender as Button).text = "";
});

30.09.2013 - 09:53 Uhr

Du kannst mit (string).PadLeft oder .PadRight eine dynamische anzahl Platzhaltern an den String anfügen.

Bsp:
PadLeft setzt die Zeichen Liks in den string. (PadRightRechts)


string Name = "Hallo"; // 5 Buchstaben
Console.Write((Name as string).PadLeft(10,'-');

/*Ausgabe
-----Hallo
\*/

Name  = "KeinName"; // 9 Buchstaben
Console.Write((Name as string).PadLeft(10,'-');

/*Ausgabe
-KeinName
\*/

Name = "Hallo"; // 5 Buchstaben
Console.Write((Name as string).PadRight(10,'-');

/*Ausgabe
Hallo-----
\*/

27.09.2013 - 16:05 Uhr

Ich hätte da eine recht eingfache kleine aufgabe, die durch "swap" inspiriert wurde.

undzwar stehen euch insgesamt 2 variablen(int) zur verfügung, in diesen variablen stehen unterschiedliche zahlen, tauscht diese ohne eine weitere variable zu verwenden.

26.09.2013 - 16:40 Uhr

Schmeiß doch einfach alles in ein grid gib für das grid keine größe an definier die Positionen deiner Items per Grid.Column und Row und gib gib die größe dann Relativ an z.B.


        <Grid.RowDefinitions>
            <RowDefinition Height="50" />
            <RowDefinition Height="50*" />
            <RowDefinition Height="100*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="200*" />
            <ColumnDefinition Width="370*" />
        </Grid.ColumnDefinitions>

Die Werte mit dem Sternchen sind relative werte XML rechnet diesem beim größer ziehem um und die ohne sternchen bleiben immer genau so groß wie beschrieben.

Zum scrollen kannst du das Grid dem Grid auch ne MInnimale größe geben und es in ein Scroll/Stackpannel viever schmeißen

20.09.2013 - 16:12 Uhr

Achso, ok hast du eine Dkomentation der DLL, bzw. wo hast du die DLL her?

Oder wenn du die schrittweite einstellen kannst nimm einfach als schrittweite 30,72 als Achsen Titel t/sec, und nimm die anzahl an Punkten *30,72

20.09.2013 - 12:35 Uhr

Hi,

Was soll denn 30.72 sein??

Du willst also die ?(X oder Y)Achse wenn die Punkte zuviele werden auf 30.72 setzen??

Woher weißt du das Deine X-Achse von 0-1023 geht??

Wenn du das irgentwo Festlegst ist dies der Punkt an dem ich ansetzten würde.

vllt hier ?myPane.XAxis.Scale.Max = MaxXAxis;?

19.09.2013 - 15:40 Uhr

Ein TIFF Ist ja vom Grundaufbau nicht sonderlich kompliziert, und wird glaube ich auh auf Wikipedia beschrieben.

Wenn es keine von .NET bereitgestellt Methode gibt, nehmt euch doch den BiaryWriter und baut euch den Header selbst.

Der echt ist ja dann eine einafche Iteration durch die Bildpunkte.

19.09.2013 - 12:27 Uhr

Gelöst!!
Ich verwende nun ein ContentPresenter


 <ContentPresenter Content="{Binding ElementName=PagesHost, Path=SelectedItem}" Grid.Column="1" Grid.Row="2">

 <DataTemplate DataType="{x:Type MyClasses:Class1}">
<!-- Sachen darstellen-->

                </DataTemplate>
        </ContentPresenter>

19.09.2013 - 11:31 Uhr

Hallo,

Ich Möchte gerne einem DataGrid ein template geben jenach ausgewähltem item aus einer TreeView.

Ich lasse die TreeView dynamisch aufbauen daher enthät sie auch unterschiedliche Klassen als TreeViewItem.

ClassenBeispiel:


public Class Class1
{
ObservableCollection<Class2> ChildPages;

Name = "Element1";

public Clas1()
{
ChildPages.Add(new Class2());
}
}
public Clas Class2
{
ObservableCollection<Class2> ChildPages;

Name = "Element1.1";
}


            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding ChildPages}">
                      <TextBlock Text="{Binding Name}" />

Nun möchte ich aus abhängig von der klasse des SelectedItem der TreeView ein Datagrid befüllen.


<DataGrid Template="{DynamicResource TMandator}"> 

Template des DataGrid


<Window.Resources>
            <Style x:Key="GridStyle" TargetType="{x:Type DataGrid}" >
            <Setter Property="Height" Value="500" />
            <Setter Property="Width" Value="300" />
            <Setter Property="AutoGenerateColumns" Value="False" />
                <Setter Property="IsReadOnly" Value="False" />
                <Setter Property="GridLinesVisibility" Value="All" />
                <Setter Property="CanUserAddRows" Value="True" />
                <Setter Property="CanUserDeleteRows" Value="True" />
                <Setter Property="CanUserResizeColumns" Value="True" />
                <Setter Property="CanUserResizeRows" Value="False" />
                <Setter Property="CanUserReorderColumns" Value="False" />
            </Style>

            <ControlTemplate x:Key="Template">
            <DataGrid ItemsSource="{Binding ElementName=TreeView1,
                                    Path=SelectedItem.SelectedItem,
                                    UpdateSourceTrigger=PropertyChanged}"
            Style="{StaticResource GridStyle}" >
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Name" Width="*" FontSize="15"
                                        Binding="{Binding Path=<!--Hier möchte ich die namen der untergeordneten Elemente anzeigen-->}" />
                    </DataGrid.Columns>                
                </DataGrid>
        </ControlTemplate>
    </Window.Resources>

16.09.2013 - 12:09 Uhr

Hallo,

undzwar möchte ich In einem datagrid gefilterte daten anzeigen.

Ich muss eigentlich nur wissen wie ich ein Datagrid per c# Code erstelle und mit daten fülle.

Danke im vorraus.

PS:
Es ist bestimmt Simpel aber ich bekomm einfach keine daten ins dataGrid.

Per XML Binde ich die Daten an die Eigenschaft "DisplayGrid" eines TreeViewItems(Ja es gibt Displaygrid nicht Selbst erstellt).


ItemsSource="{Binding ElementName=PagesHost,
                                        Path=SelectedItem.DisplayGrid,
                                        UpdateSourceTrigger=PropertyChanged}" />

[TreeView enthält unterschiedliche klassen]

In der Eigenschaft möchte ich dem DataGrid die gefilterten daten übergeben.


        public DataGrid DisplayGrid
        {
          get {
              DataGrid MG = new DataGrid();

              return MG; }
        }