2010-12-08 78 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,因为没有输入可以推回源值。