WPF Несколько мастер / детали, та же сетка - PullRequest
0 голосов
/ 11 сентября 2009

У меня есть TreeView, который имеет три уровня.

Допустим, это лига, дивизия и команда TreeView.

Теперь, когда я выбираю каждый из элементов в дереве, я хотел бы видеть подробную информацию о нем.

Какой лучший способ добиться этого?

Поскольку Grid не содержит предметов (например, ListBox), я не могу просто установить его ItemsSource и сделать DataTemplate ...

Я думал об использовании ListBox, который будет содержать только выбранный элемент, но это, похоже, очень плохо ...

Спасибо.

Ответы [ 2 ]

1 голос
/ 11 сентября 2009

Сначала вы определяете 3 DataTemplate s для классов лиги, дивизиона и команды. После этого вы привязываете TreeView к корню ваших объектов. Ваши классы Лиги и Дивизиона должны иметь свойство Children, которое возвращает детей. Все ваши классы должны иметь свойство Name.

Затем, когда вы хотите показать один объект, используйте ContentPresenter и привяжите его содержимое к SelectedItem, если TreeView.

Например:

<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>

Этот код не был протестирован или скомпилирован, он просто приведен в качестве примера.

0 голосов
/ 11 сентября 2009

Я бы создал модель представления со свойствами для древовидной структуры, текущего выбора и подробностей текущего выбора.

Структура дерева односторонне привязана к дереву, SelectedItem из дерева - OneWayToSource, привязанный к текущему свойству выбора (из-за ограничений свойства). Это свойство изменяет список дочерних элементов после изменения текущего выделения, и дочерние элементы привязываются к отображаемому списку.

...