我正在尝试绝对最简单地使用HierarchicalDataTemplate
将嵌套数据绑定到WPF TreeView
。出于某种原因,我的树的孩子看不见:
这是整个XAML:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525">
<TreeView Name="ctTree">
<TreeView.Resources>
<HierarchicalDataTemplate DataType = "{x:Type src:MyClass}"
ItemsSource = "{Binding Path=Children}">
<TextBlock Text="{Binding Path=Name}"/>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
</Window>
除了使用和命名空间之外,这里还有C#的所有内容:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var collection = new ObservableCollection<MyClass>
{
new MyClass { Name = "parent one" },
new MyClass { Name = "parent two" },
};
collection[0].Children.Add(new MyClass { Name = "child one" });
collection[0].Children.Add(new MyClass { Name = "child two" });
ctTree.ItemsSource = collection;
}
}
class MyClass
{
public string Name { get; set; }
public ObservableCollection<MyClass> Children
= new ObservableCollection<MyClass>();
}
请注意,数据模板确实适用于项目:数据来自Name
属性,如果模板未应用,则显示为“MyClass”。
我如何让孩子们去表演?我似乎与HierarchicalDataTemplate
上的所有示例完全一样。
答案 0 :(得分:6)
MyClass.Children
是一个字段,而不是属性。您无法绑定到某个字段,将Children
字段转换为属性,然后一切都应该有效:
class MyClass
{
public string Name { get; set; }
public ObservableCollection<MyClass> Children { get; private set; }
public MyClass()
{
Children = new ObservableCollection<MyClass>();
}
}
答案 1 :(得分:-1)
我认为Treeview.Resources是错误的。您想将模板放在Treeview.ItemTemplate。
中