WPF Несколько основных / подробных данных, одна и та же сетка

StackOverflow https://stackoverflow.com/questions/1410410

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

Спасибо.

Это было полезно?

Решение

Сначала вы определяете 3 DataTemplates для вашей лиги, дивизиона и командных классов.После этого вы связываете 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>

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top