2

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

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

4

1 回答 1

0

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

  1. 一个 UserControl,它具有一个TreeView并且还定义了分层数据模板。
  2. 一个数据类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; }
}
于 2012-12-29T12:09:30.653 回答