2015-09-23 23 views
0

我有兩個DataGrid並且只想在一個DataGrid中一次選擇一行。當我在一個DataGrid中進行選擇時,應該刪除其他DataGrid中的選定行。我曾嘗試使用OnSelectionChanged甚至改變反向DataGrid中的選擇,但這反過來導致OnSelectionChanged甚至在當前DataGrid中被調用,並且我最終根本沒有選擇。有沒有人有任何想法如何做到這一點?WPF兩個Datagrids一個選定的行

<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

你可以退訂/分離的第二個DataGrid的SelectionChanged事件而選擇在第一個DataGrid &反之亦然&做然後執行您的邏輯之後重新連接 - 在這種情況下,取消選擇該項目。

我已經爲其中一個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; 
} 
+0

輝煌。謝謝。不知道爲什麼我沒有想到這一點。 – DAVEWASLIN

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

我在你處境的時候做這個。

相關問題