WPF Две сетки данных Одна выбранная строка

У меня есть два DataGrid, и я хочу иметь только выбранную строку в одном из DataGrid за раз. когда я делаю выбор в одном 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;
        }

person DAVEWASLIN    schedule 23.09.2015    source источник
comment
Можете ли вы добавить свой код.   -  person Nikita Shrivastava    schedule 23.09.2015


Ответы (2)


Вы можете отменить подписку/отсоединить событие SelectionChanged второй сетки данных, пока выбор выполняется в первой сетке данных и наоборот, а затем снова подключиться после выполнения вашей логики - в этом случае отмена выбора элемента.

Ниже я написал пример кода для одного из событий выбора сетки данных. Расширить его для второй сетки данных довольно просто.

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;
}
person Ankit    schedule 23.09.2015
comment
Блестящий. Спасибо. не знаю, почему я не подумал об этом. - person DAVEWASLIN; 23.09.2015

Вы можете создать логическое значение, которое сохранит событие.

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

Я делаю это, когда нахожусь в вашей ситуации.

person Moussawi    schedule 23.09.2015