代码之家  ›  专栏  ›  技术社区  ›  John Gietzen

WPF:是否可以用绑定表达式嵌套TreeView项?

  •  0
  • John Gietzen  · 技术社区  · 14 年前

    假设我有以下数据:

    <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 回复  |  直到 14 年前
        1
  •  5
  •   Charlie    14 年前

    编辑 :没有看到您只想在XAML中执行此操作。 This msdn-post应该能帮到你。

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

    然后是您的 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>
    

    结果是:

    alt text http://img191.imageshack.us/img191/7841/treeviewhierarchy.png