我有两个DataGrids,并且只希望一次在一个DataGrids中有一个选定的行。当我在一个DataGrid中进行选择时,应删除另一个DataGrid中的选定行。我已经尝试使用OnSelectionChanged甚至更改对面DataGrid中的选择,但这反过来导致OnSelectionChanged甚至在当前DataGrid中被调用,并且我最终没有任何选择。有谁知道如何做到这一点?
<DataGrid x:Name="DataGrid1"
DockPanel.Dock="Top"
ItemsSource="{Binding DataGrid1CollectionView}"
SelectedItem="{Binding DataGrid1SelectedArisingGroup}"
SelectionChanged="DataGrid1SelectionChanged"
>
</DataGrid>
<DataGrid x:Name="DataGrid2"
DockPanel.Dock="Top"
ItemsSource="{Binding DataGrid2CollectionView}"
SelectedItem="{Binding DataGrid2SelectedArisingGroup}"
SelectionChanged="DataGrid2SelectionChanged"
>
</DataGrid>
private void DataGrid1SelectionChanged(object sender, SelectionChangedEventArgs e)
{
DataGrid2.SelectedItem=null;
}
private void DataGrid2SelectionChanged(object sender, SelectionChangedEventArgs e)
{
DataGrid1.SelectedItem=null;
}
答案 0 :(得分:2)
您可以取消订阅/分离第二个数据网格的SelectionChanged事件,同时在第一个数据网格中完成选择。反之亦然然后在执行逻辑后重新连接 - 在这种情况下取消选择项目。
我在下面为一个datagrid的选择更改事件编写了一个代码示例。为第二个数据网格扩展它非常简单。
XAML:
<DataGrid x:name="dgr1" SelectionChanged="dgr1_Selection"/>
<DataGrid x:name="dgr2" SelectionChanged="dgr2_Selection"/>
代码背后:
private void dgr1_Selection(object sender, SelectionChangedEventArgs e)
{
dgr2.SelectionChanged -= dgr2_Selection;
//unselecte the selected item of dgr2 - Set the IsSelected property of
//the Selected item to false or dgr2.SelectedItem=null
dgr2.SelectionChanged += dgr2_Selection;
}
答案 1 :(得分:0)
您可以创建一个保存事件的布尔值。
bool bSave = false;
public void OnSelectedChange_OneDatagrid(Object sender, RoutedEventArgs e)
{
if(bSave)
{
// You can make the treatment
}
else
{
bSave = false;
}
}
public void OnSelectedChange_TwoDatagrid(Object sender, RoutedEventArgs e)
{
if(!bSave)
{
// You can make the treatment
}
else
{
bSave = true;
}
}
我在你处境时这样做。