【发布时间】:2018-07-25 17:40:55
【问题描述】:
我有一个使用行详细信息模板的内部数据网格:
<DataGrid x:Name="OuterGrid" SelectionChanged="OuterGrid_SelectionChanged">
<DataGrid.Columns>
<DataGridTemplateColumn x:Name ="Header" Header="Header" IsReadOnly="True" Width="480">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Expander x:Name="Expander" Grid.Row="0" Expanded="Expander_Expanded" Collapsed="Expander_Collapsed">
<Expander.Header>
<TextBlock x:Name="TextBlockExp" Margin="15,0,0,0" Text="{Binding HeaderLabel}"/>
</Expander.Header>
<Grid>
</Grid>
</Expander>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=IsSelected, RelativeSource= {RelativeSource AncestorType=DataGridRow}}" Value="True">
<Setter Property="Foreground" TargetName="TextBlockExp" Value="White"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid x:Name="InnerGrid" SelectionChanged="InnerGrid_SelectionChanged" ItemsSource="{Binding InnerGridList}" SelectedItem="{Binding SelectedSecondItem}">
<DataGrid.Columns>
<DataGridTextColumn Header="A" Binding="{Binding AValue}" IsReadOnly="True" Width="320">
</DataGridTextColumn>
<DataGridTextColumn Header="B" Binding="{Binding BValue}" IsReadOnly="True" Width="250">
</DataGridTextColumn>
<DataGridTextColumn Header="C" Binding="{Binding CValue}" IsReadOnly="True" Width="250">
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
外网格和内网格的绑定已经OK了。但是,当我尝试更改内部网格中的选定项时,也会调用外部网格的选择更改事件。
private void OuterGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (OuterGrid.SelectedItems.Count > 0)
{
OuterGridModel row = (OuterGridModel)OuterGrid.SelectedItems[0];
PopulateInnerGrid(row.InnerGridList);
row.SelectedSecondItem = row.InnerGridList[0];
}
}
当我使用这一行设置选中项时(如上图):
row.SelectedSecondItem = row.InnerGridList[0];
InnerGrid_SelectionChanged 被解雇,OuterGrid_SelectionChanged 也被解雇。
我只想要InnerGrid_SelectionChanged。
【问题讨论】: