首先,我使用的是MVVM设计模式。我有一个DataGrid,如下面的第一个代码片段所示,其中RowDetailsTemplate设置为另一个网格,下面是第二个代码片段。父网格的itemsource是Adult类型的ObservableCollection,子网格的itemsource是Child类型的ObservableCollection,它是每个Adult对象的属性。我正在尝试为每个网格设置SelectedItem和button命令,以便它命中与视图关联的ViewModel,我无法在这里看到我的错误。任何建议都会很棒。
<DataGrid
AutoGenerateColumns="False"
ItemsSource="{Binding AllAdults}"
SelectedItem="{Binding SelectedAdult}"
RowDetailsTemplate="{DynamicResource RowDetailsTemplate}"
RowDetailsVisibilityMode="Collapsed">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Command="{Binding Path=DataContext.ShowAdultInfoCommand, RelativeSource= {RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}" Content="Print"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Binding="{Binding Path=AdultId, Mode=OneWay}" Header="Id" IsReadOnly="True" />
</DataGrid.Columns>
<DataTemplate x:Key="RowDetailsTemplate">
<DataGrid
ItemsSource="{Binding AllChildren}"
AutoGenerateColumns="False"
SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}, AncestorLevel=2}, Path=DataContext.SelectedChild}">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Command="{Binding Path=DataContext.ShowChildInfoCommand, RelativeSource= {RelativeSource FindAncestor, AncestorType={x:Type DataGrid}, AncestorLevel=2}}" Content="Show"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Binding="{Binding Path=ChildId, Mode=OneWay}" Header="Child Id" IsReadOnly="True" />
</DataGrid.Columns>
</DataGrid>