我正在尝试将一些数据从类实例绑定到TreeView。我的代码如下:
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());
}
}
}
和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:loc="clr-namespace:WpfApplication1"
Title="MainWindow" Height="287" Width="525">
<StackPanel Orientation="Horizontal" VerticalAlignment="Stretch">
<TreeView Name="TreeView" ItemsSource="{Binding}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</StackPanel>
</Window>
我的TreeView中没有显示任何内容。我做错了什么?
我希望看到:
-Test
- 1
- 2
- 3
等
更新:生成名称和子项属性而不是公共字段 更新:添加了我期望在TreeView中看到的内容
答案 0 :(得分:2)
将Parent类型的“myClass”绑定到datacontext,并为ItemSource使用相同的对象。这不起作用,因为Parent不是可枚举的类型。
将ItemSource绑定从“{Binding}”更改为“{Binding Children}”,并将HierarchicalDataTemplate更改为DataTemplate。
如果要将myClass保留为顶级节点,还可以将myclass包装在IEnumerable中,并将其设置为数据上下文。
答案 1 :(得分:0)
您只能绑定到公共属性,而不能绑定到字段。将Name
和Children
更改为公共属性,这应该有效。
答案 2 :(得分:0)
这里试试这个:
<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()。