2012-12-29 26 views
2

我有一個類MyClass,從UserControl繼承工作就像一個控件,但不像一個綁定到NodeName及其子節點的TextBlock。這是爲什麼?HierarchicalDataTemplate不會爲用戶控件

如果我沒有從UserControl繼承MyClass一切正常。

public class MyClass 
{ 
    public string NodeName { get; set; } 
    public ObservableCollection<MyClass> Children { get; set; } 
} 

那麼如何在第一種情況下修復它?

回答

0

你不應該使用控件作爲你的DataContext。相反,你應該從你的觀點分開你的數據,這意味着你將有兩類:

  1. 一個用戶控件具有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; } 
} 
+0

我需要一個樹,其中每個節點都有自己的看法(用戶控件)這是顯示當我點擊它。但是在treeview中我只需要TextBlock和Text。 –

+0

這就是'HierarchicalDataTemplate'的用途。您可以修改它以根據其屬性/數據類型更改每個節點的外觀。 –

+0

對不起 - 我輸入錯誤。我需要一棵樹,每個節點都有自己的視圖(UserControl),當我點擊它時會顯示它。但是在treeview中我只需要TextBlock和Text。 –

相關問題