2010-12-08 620 views
2

我有一個數據源:WPF:綁定的TreeView

private List<PlayData> _treeData = new List<PlayData>(); 

    private void Test() 
    { 
     _treeData.Add(new PlayData() 
     { 
      BoolList = new List<bool>() { true, false, true }, 
      Name = "A" 
     }); 

     _treeData.Add(new PlayData() 
     { 
      BoolList = new List<bool>() { true, false, true }, 
      Name = "B" 
     }); 

     DataContext = this; 
    } 

如何綁定這XAML,這樣的名字是父母和布爾的名單是孩子。我嘗試了這一點unsuccesfully:

<TreeView x:Name="treeView" Height="200" ItemsSource="{Binding Path=TreeData}" > 
     <TreeView.ItemTemplate> 
      <HierarchicalDataTemplate ItemsSource="{Binding Path=BoolList, Mode=TwoWay}" > 
       <TextBlock FontWeight="Bold" Text="{Binding Path=Name, Mode=TwoWay}" /> 
      </HierarchicalDataTemplate> 
     </TreeView.ItemTemplate> 
    </TreeView> 
+1

你是什麼意思「不成功」? – 2010-12-08 12:05:55

回答

0

這不是從你的樣品,你在做什麼明確的 - 但在本質上

  1. 你必須有名爲TreeData代碼中定義一個公共屬性(從您的樣品丟失,但假設這是一個回報_ treeData
  2. BoolList需要是TreeData一個子屬性(這似乎是這種情況)
  3. 您需要定義一個HierarchicalTemplate在您的TreeView包含子元素的每個元素。
  4. 定義你的TreeView每個元素不包含子元素

如果有不同的數據類型,在你的情況,你需要在

<HierarchicalDataTemplate DataType="{x:Type foo:PlayData}" 
    ItemsSource="{Binding BoolList}"> 
申報對象的類型作爲常規 DataTemplate

如果可以有多個匹配,模板的順序很重要。

0

_treeData字段需要作爲一個屬性公開作爲綁定。從示例代碼中不清楚你是否在做這件事。

您還可以在兩個Bindings上擺脫Mode = TwoWay,因爲沒有輸入可以推回源值。