Frage

Ich habe einen TreeView die drei Ebenen hat.

Lassen Sie uns sagen seine eine Liga, Division und Team TreeView.

Wenn ich nun die einzelnen Elemente in der Struktur auswählen, ich möchte detaillierte Informationen über sie sehen.

Was ist der beste Weg, um dies zu erreichen?

Da Grid Elemente nicht tut (wie ein ListBox), kann ich nicht nur seine ItemsSource gesetzt und eine DataTemplate machen ...

Ich dachte über eine ListBox verwendet, die nur das ausgewählte Element enthalten werden, aber dies scheint sehr schlecht zu sein ...

Danke.

War es hilfreich?

Lösung

Sie zuerst die 3 DataTemplates für Ihre Liga, Division und Team Klassen definieren. Nach binden Sie die TreeView an der Wurzel Ihrer Objekte. Ihre Liga und die Division Klassen sollten ein Kinder Eigenschaft haben, dass die Kinder zurück. Alle Klassen sollten eine Namenseigenschaft haben.

Dann, wenn Sie ein einzelnes Objekt angezeigt werden soll, verwenden Sie die ContentPresenter, und die Bindung seinen Inhalt an den SelectedItem wenn die TreeView.

Zum Beispiel:

<StackPanel>
   <StackPanel.Resources>

       <DataTemplate DataType="{x:Type your_namespace:League}">
           <StackPanel Orientation="Vertical">
               <TextBlock Text={Binding Name}/>
               <.../>
           <StackPanel>
       </DataTemplate>

       <DataTemplate DataType="{x:Type your_namespace:Division}">
           <StackPanel Orientation="Vertical">
               <TextBlock Text={Binding Name}/>
               <.../>
           <StackPanel>
       </DataTemplate>

       <DataTemplate DataType="{x:Type your_namespace:Team}">
           <StackPanel Orientation="Vertical">
               <TextBlock Text={Binding Name}/>
               <.../>
           <StackPanel>
       </DataTemplate>

   </StackPanel.Resources>

   <TreeView x:Name="_tree" ItemsSource="{Binding RootOfYourItems}">
      <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
            <TextBlock Text={Binding Name}/>
        </HierarchicalDataTemplate>
   </TreeView>

   <ContentPresenter Content="{Binding Path=SelectedItem, ElementName=_tree}" />

</StackPanel>

Dieser Code wurde nicht geprüft oder kompiliert, es ist nur als Beispiel vorgesehen.

Andere Tipps

Ich würde ein Ansichtsmodell mit Eigenschaften für den Baum structur, die aktuelle Auswahl erstellen und die Details der aktuellen Auswahl.

Die Baum-Struktur ist ein Weg zur Baum-Ansicht gebunden, die SelectedItem vom treeview ist OneWayToSource auf die aktuelle Auswahl Eigenschaft gebunden (aufgrund der Beschränkungen des Eigentums). Diese Eigenschaft ändert die Liste der untergeordneten Elemente, sobald die aktuelle Auswahl ändert, und die untergeordneten Elemente werden in das Listenfeld gebunden ihnen angezeigt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top