在WPF中绑定到TreeView
我试图将一些数据从类实例绑定到树视图。我的代码如下:在WPF中绑定到TreeView,wpf,data-binding,treeview,Wpf,Data Binding,Treeview,我试图将一些数据从类实例绑定到树视图。我的代码如下: public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Parent myClass = new Parent(); this.DataContext = myClass; } } public class Parent {
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Parent myClass = new Parent();
this.DataContext = myClass;
}
}
public class Parent
{
private List<string> children = new List<string>;
public string Name {get;set;}
public List<string> Children
{
get { return this.children; }
set { this.children=value; }
}
public Parent()
{
this.Name = "Test";
for (int i = 1; i <= 10; i++)
{
Children.Add(i.ToString());
}
}
}
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
父myClass=新父级();
this.DataContext=myClass;
}
}
公共类父类
{
私有列表子项=新列表;
公共字符串名称{get;set;}
公开儿童名单
{
获取{返回this.children;}
设置{this.children=value;}
}
公共家长()
{
this.Name=“Test”;
对于(int i=1;i您只能绑定到公共属性,而不能绑定到字段。将Name
和Children
更改为公共属性,这应该会起作用。您将父类型的“myClass”绑定到datacontext,并对ItemSource使用相同的对象。这不会起作用,因为父类型不是可枚举类型
将ItemSource绑定从“{binding}”更改为“{binding Children}”,并将HierarchycalDataTemplate更改为一个DataTemplate
如果要将myClass保留为顶级节点,还可以将myClass包装在IEnumerable中,并将其设置为数据上下文。请尝试以下操作:
<StackPanel Orientation="Horizontal" VerticalAlignment="Stretch">
<TextBlock Text="{Binding Name}"/>
<TreeView Name="TreeView" ItemsSource="{Binding Children}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</StackPanel>
有几件事:
- “
Name
”属性超出范围
- 我们需要绑定
TreeView
以及DataTemplate
- 我们使用默认的
{Binding}
调用
当前项上的ToString()
进行了此更新(如原始问题中所示),但没有任何更改。TreeView仍然为空。在这种情况下,如何将Parent.Name显示为顶级节点?这是我想看到的:-Test--1--2--3--4 etc创建Parent类型的列表并将myclass添加到其中。然后,将datacontext设置为列表而不是对象。
<StackPanel Orientation="Horizontal" VerticalAlignment="Stretch">
<TextBlock Text="{Binding Name}"/>
<TreeView Name="TreeView" ItemsSource="{Binding Children}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</StackPanel>