HierarchicalDataTemplate不适用于UserControls

时间:2012-12-29 11:58:24

标签: c# wpf user-controls treeview hierarchicaldatatemplate

我有一个类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; }
 }

那么如何在第一种情况下修复它?

1 个答案:

答案 0 :(得分:0)

您不应将控件用作DataContext。相反,您应该将数据与视图分开,这意味着您将拥有两个类:

  1. 具有TreeView并且还定义分层数据模板的UserControl。
  2. 数据类MyDataClass,其中包含应用于显示树的数据。
  3. 然后,只需将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; }
    }