绑定到TreeView和DataGrid

时间:2011-10-30 12:43:38

标签: wpf data-binding

我对WPF很新,我遇到了一个无法解决的问题。 有一个包含两个表T1和T2的数据集。 T1具有像这样的递归结构

T1Id
的ParentId
名称

和这段关系:

ds.Relations.Add("RecursiveRel",
  tables["T1"].Columns["T1Id"],
  tables["T1"].Columns["ParentId"]);

我通过将它绑定到DataView来在TreeView中显示该表:

DvT1 = ds.Tables[0].DefaultView;
DvT1.RowFilter = string.Format("Id = '{0}'", IdOfFirstRecord);

在XAML中:

<TreeView ItemsSource="{Binding DvT1}">
  <TreeView.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding RecursiveRel}">
      <TextBlock Text="{Binding Name}" />
    </HierarchicalDataTemplate>
  </TreeView.ItemTemplate>
</TreeView>

这样可以正常工作,并在树视图中很好地显示层次结构。

现在表T2发挥作用,具有这种结构:

T2ID T1Id 名称

T1和T2之间存在1:n关系,其中n> = 0.已在DataSet中添加了关系:

ds.Relations.Add("T1ToT2",
  tables["T1"].Columns["T1Id"],
  tables["T2"].Columns["T1Id"]);

T2正在使用DataGrid,它只应显示链接到当前所选T1记录的记录。 什么应该进入DataGrid的ItemsSource来实现这一目标?我还没有发现任何能做到这一点的事情。 我还应该注意,如果重要的话,这是一个MVVM应用程序,因此代码隐藏不是一种选择。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

你试过这个吗?

<DataGrid ItemsSource="{Binding SelectedItem.T1ToT2, ElementName=theTreeView}" />