WPF - 将内部数据网格绑定到外部数据网格

时间:2013-05-27 11:12:10

标签: wpf xaml binding grid relativesource

需要一些帮助。 在XAML中,我有以下布局:

<DataGrid Name="outerGrid"  ItemsSource="{Binding fullData}">
     <DataGrid.Columns>
          <DataGridTextColumn Header="Something"  Binding="{Binding something}" />
     </DataGrid.Columns>
     <DataGrid.RowDetailsTemplate>
          <DataTemplate>
                <DataGrid Name="innerData" ItemsSource="{Binding innerData}">
                     <DataGrid.Columns>
                          <DataGridTextColumn Header="Something"  Binding="{Binding something}" />
                     </DataGrid.Columns>
                </DataGrid>
          </DataTemplate>
     </DataGrid.RowDetailsTemplate>
</DataGrid>
<DataGrid Name="fullDetailGrid"  ItemsSource="{Binding ??????? }">
     <DataGrid.Columns>
          <DataGridTextColumn Header="Something"  Binding="{Binding something}" />
     </DataGrid.Columns>
</DataGrid>

这是我想预设的结构,我知道如果我做一个三级深度网格,这很容易,但我有业务要求有这种结构。

无论如何都要在没有代码的情况下执行此操作,只需执行内部网格的亲属源绑定

谢谢

1 个答案:

答案 0 :(得分:2)

我遇到了类似的问题,其中我的一个父控件的ItemsSource已绑定到我的ViewModel中的一个属性(绑定到DataContext),但我需要完整的ViewModel绑定到另一个属性那里。然后它具有以下语法(在xaml中):

    <TextBlock Text="Documents" Visibility="{Binding ElementName=PageRoot, Path=DataContext.IsVisible }" />

正如您所看到的,我将项目绑定到PageRoot(DataContext已绑定到ViewModel的位置),然后将其指向我的布尔值,指示可见性(显然有转换器,但我为了阅读目的删除了它)

出于您的目的:您可以尝试将fullDetailGrid的ItemsSource绑定到innerData源(尽管您可能使用x:Key而不是Name来定义该元素)。然后,您可以将其指向包含fullDataGrid所需值的属性。语法将或多或少以下(假设您将在嵌套数据网格上使用x:Key innerData):

    <DataGrid Name="fullDetailGrid"  ItemsSource="{Binding ElementName=innerData, Path=YourDataContext.YourCollection }">