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 として使用しないでください。代わりに、データをビューから分離する必要があります。つまり、2 つのクラスが存在することになります。

  1. TreeViewを持ち、階層データ テンプレートも定義するUserControl 。
  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 に答える