WPF: возможно ли вложить элементы TreeView с выражением привязки? - PullRequest
0 голосов
/ 28 апреля 2010

Допустим, у меня есть следующие данные:

<XmlDataProvider x:Key="Values">
  <x:XData>
    <folder name="C:">
      <folder name="stuff" />
      <folder name="things" />
      <folder name="windows">
        <folder name="system32" />
      </folder>
    </folder>
  </x:XData>
</XmlDataProvider>

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

Я знаю, что могу получить это там в коде C #, но я хотел сделать это с помощью выражения привязки.

1 Ответ

5 голосов
/ 28 апреля 2010

РЕДАКТИРОВАТЬ : не видел, что вы хотите сделать это только в XAML Этот пост MSDN должен помочь вам.

HierarchicalDataTemplate не так уж плохо, если ваши данные уже в иерархической форме. Допустим, вы переводите эти XML-данные в класс модели, используя такой код:

public partial class TreeViewHierarchy : Window
{
    public ObservableCollection<Folder> Folders
    {
        get;
        set;
    }

    public TreeViewHierarchy()
    {
        Folder system32 = new Folder() { Name = "system32" };
        Folder windows = new Folder() { Name = "windows", 
            Children = new ObservableCollection<Folder>() { system32 } };

        Folder things = new Folder() { Name = "things" };
        Folder stuff = new Folder() { Name = "stuff" };

        Folder c = new Folder() { Name = "C:",
            Children = new ObservableCollection<Folder>() { stuff, things, windows } };

        Folders = new ObservableCollection<Folder>() { c };

        InitializeComponent();

    }
}

public class Folder
{
    public string Name
    {
        get;
        set;
    }

    public ObservableCollection<Folder> Children
    {
        get;
        set;
    }
}

Тогда XAML для вашего TreeView будет таким простым:

<Window x:Class="TestWpfApplication.TreeViewHierarchy"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TreeViewHierarchy" Height="300" Width="300"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<TreeView ItemsSource="{Binding Folders}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
            <TextBlock Text="{Binding Name}"/>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

И результат:

альтернативный текст http://img191.imageshack.us/img191/7841/treeviewhierarchy.png

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