2012-03-17 54 views
3

我正在嘗試使用絕對最簡單的HierarchicalDataTemplate將嵌套數據綁定到WPF TreeView。出於某種原因,我的樹的孩子是不可見的:HierarchicalDataTemplate不顯示任何孩子 - 爲什麼不?

                                                enter image description here

這裏是整個X AML:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:src="clr-namespace:WpfApplication1" 
     Title="MainWindow" Height="350" Width="525"> 
    <TreeView Name="ctTree"> 
     <TreeView.Resources> 
      <HierarchicalDataTemplate DataType = "{x:Type src:MyClass}" 
             ItemsSource = "{Binding Path=Children}"> 
       <TextBlock Text="{Binding Path=Name}"/> 
      </HierarchicalDataTemplate> 
     </TreeView.Resources> 
    </TreeView> 
</Window> 

和這裏的所有的C#這背後,除了usings和命名空間:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     var collection = new ObservableCollection<MyClass> 
     { 
      new MyClass { Name = "parent one" }, 
      new MyClass { Name = "parent two" }, 
     }; 
     collection[0].Children.Add(new MyClass { Name = "child one" }); 
     collection[0].Children.Add(new MyClass { Name = "child two" }); 
     ctTree.ItemsSource = collection; 
    } 
} 

class MyClass 
{ 
    public string Name { get; set; } 
    public ObservableCollection<MyClass> Children 
     = new ObservableCollection<MyClass>(); 
} 

注意,數據模板並實際應用於項目:數據從Name取屬性,如果模板不適用,則會顯示爲「MyClass」。

我該如何讓孩子們表演?我似乎和HierarchicalDataTemplate上的所有例子完全一樣。

回答

6

MyClass.Children是一個字段,而不是一個屬性。你不能綁定到字段,Children字段轉換爲一個屬性,一切都應該有幫助:

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

    public MyClass() 
    { 
     Children = new ObservableCollection<MyClass>(); 
    } 
} 
+1

當然!我以前用「正常」綁定看過這個。現在只有一個問題:我的例外在哪裏告訴我我是如何搞砸的?我希望它不會像它那樣悄然失敗...... – 2012-03-17 14:38:13

+1

「您可以在6分鐘內接受答案」,儘管我剛剛測試過它的工作原理。謝謝你。 – 2012-03-17 14:39:11

+2

那麼,當出現錯誤時,綁定通常很安靜,這使得調試非常煩人。如果綁定似乎不能正常工作,我的步驟通常是:1)檢查拼寫錯誤。 2)確保財產確實存在。 3)確保DataContext設置正確並符合期望值。 4)將一個空轉換器添加到綁定中,並在其中設置一個斷點以查看發生了什麼。 – max 2012-03-17 14:43:25

-1

我覺得Treeview.Resources是該放錯了地方。你想把你的模板放在Treeview.ItemTemplate中。

+0

不一定,特別是如果源列表包含變量類型的對象,則需要在資源中定義模板並使其通過'DataType'隱式應用。 – 2012-03-18 04:53:51

相關問題