我有一个类MyClass
,它继承自UserControl
:
public class MyClass : UserControl
{
public string NodeName { get; set; }
public ObservableCollection<MyClass> Children { get; set; }
//...
}
我有HierarchicalDataTemplate:
<HierarchicalDataTemplate DataType="{x:Type sp:MyClass}"
ItemsSource="{Binding Path=Children}">
<TextBlock Text="{Binding Path=NodeName}" />
</HierarchicalDataTemplate>
在这种情况下,TreeView
仅显示顶级MyClass,如控件,但不像是绑定到NodeName及其子节点的TextBlock。那是为什么?
如果我不从MyClass
继承UserControl
,一切正常。
public class MyClass
{
public string NodeName { get; set; }
public ObservableCollection<MyClass> Children { get; set; }
}
那么如何在第一种情况下修复它?
答案 0 :(得分:0)
您不应将控件用作DataContext。相反,您应该将数据与视图分开,这意味着您将拥有两个类:
TreeView
并且还定义分层数据模板的UserControl。MyDataClass
,其中包含应用于显示树的数据。然后,只需将TreeView.ItemsSource
设置为根MyClass
对象。
public class MyTreeUserControl : UserControl
{
}
<HierarchicalDataTemplate DataType="{x:Type sp:MyDataClass}"
ItemsSource="{Binding Path=Children}">
<TextBlock Text="{Binding Path=NodeName}" />
</HierarchicalDataTemplate>
public class MyDataClass
{
public string NodeName { get; set; }
public ObservableCollection<MyDataClass> Children { get; set; }
}