WPF两个Datagrids一个选定的行

时间:2015-09-23 08:53:19

标签: c# wpf datagrid

我有两个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;
        }

2 个答案:

答案 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;
    }
}

我在你处境时这样做。