Как данные связывают иерархические данные с WPF TreeView? - PullRequest
6 голосов
/ 11 ноября 2010

Тип выглядит следующим образом:

class Category
{
    public string Name;
    public string Message;

    public ObservableCollection<Category> SubCategories;
}

, где он будет иметь, скажем, 5 категорий, где каждая категория содержит подкатегории от 0 (нет) до 3.

Я знаю, каксвязать неиерархические данные с WPF TreeView, но не может выяснить их для значений иерархических данных.

Ответы [ 3 ]

9 голосов
/ 11 ноября 2010

Вот пример .....

<!-- Create a TreeView, and have it source data from
       the AnimalCategories collection -->
  <TreeView ItemsSource="{x:Static local:Window1.AnimalCategories}">

    <!-- Specify the template that will display a node
         from AnimalCategories.  I.e., one each for “Amphibians”
         and “Spiders” in this sample.  It will get its nested
         items from the "Animals" property of each item -->
    <TreeView.ItemTemplate>
      <HierarchicalDataTemplate ItemsSource="{Binding Path=Animals}">

        <!-- Display the AnimalCategory by showing it's Category string -->
        <TextBlock FontWeight="Bold" Text="{Binding Path=Category}" />

        <!-- Specify the nested template for the individual Animal items
             that are within the AnimalCategories.  E.g. “California Newt”, etc. -->
        <HierarchicalDataTemplate.ItemTemplate>
          <DataTemplate>
            <TextBlock Text="{Binding Path=Name}"/>
          </DataTemplate>
        </HierarchicalDataTemplate.ItemTemplate>

      </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
  </TreeView>

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

2 голосов
/ 07 февраля 2018

Я знаю, что этот вопрос задавался давным-давно .... но есть очень хороший пример на MSDN, который расширяет ответ Muad'Dib.

Их XAML выглядит такэто:

    <StackPanel x:Name="LayoutRoot" Background="White">
        <StackPanel.Resources>
            <HierarchicalDataTemplate x:Key="ChildTemplate" >
                <TextBlock FontStyle="Italic" Text="{Binding Path=Title}" />
            </HierarchicalDataTemplate>
            <HierarchicalDataTemplate x:Key="NameTemplate" ItemsSource="{Binding Path=ChildTopics}" ItemTemplate="{StaticResource ChildTemplate}">
                <TextBlock Text="{Binding Path=Title}" FontWeight="Bold" />
            </HierarchicalDataTemplate>
        </StackPanel.Resources>
        <TreeView Width="400"  Height="300" ItemsSource="{Binding}" ItemTemplate="{StaticResource NameTemplate}" x:Name="myTreeView" />
    </StackPanel>

Я обнаружил, что объединение этих двух вариантов отлично работает для меня.

2 голосов
/ 11 ноября 2010

Во-первых, вы захотите превратить все эти поля в свойства - привязка данных WPF не может привязываться к полям.(И тогда ответ Муад'Диба должен сработать.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...