2012-11-12 24 views
1

我在視圖模型具有的「東西」一個ObservableCollection和幾個過濾,產生額外的ObservableCollections該列表中的子集的SelectedItem變化。我在屏幕上有兩個DataGrid,並且我已經將它們分別綁定到子集ObservableCollections中的一個。WPF Datagrid的忽略,如果該項目不在電網

兩個DataGrid中有他們的SelectedItem屬性綁定到視圖模型SelectedThing屬性。

當我改變SelectedThing無論是編程或由兩個電網的一個選擇行,按預期的方式將發生變化。如果現在由SelectedThing指向的項目存在於網格中,則網格將更新它的選定項目。

因此,這裏是我的問題...如果SelectedThing不網格的存在的ItemSource,選擇的作用就像什麼也沒發生,並保持在任何狀態它是在SelectedThing改變之前。理想情況下,如果底層視圖模型屬性不再設置爲網格的ItemsSource中的某個東西,那麼我希望所選內容清除...任何人都有任何建議?

回答

2

好的。得到它的工作。如果它在將來幫助別人,這就是使它工作的原因...... 在你的代碼背後,爲視圖模型的PropertyChanged事件註冊一個事件處理程序,然後使用它來檢查每個網格,看它是否包含該項目被選中。如果不是,則清除該網格中的選定內容。我也修改了我的SelectedThing屬性忽略傳入NULL值,以避免死鎖(在我的應用程序將永遠不會初始化之後NULL)

_vm是返回我的視圖模型一個屬性。

_vm.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(_vm_PropertyChanged); 

    void _vm_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) 
    { 
     if (e.PropertyName == "SelectedThing") 
     { 
      CheckSelection(grid1, _vm.SelectedThing); 
      CheckSelection(grid2, _vm.SelectedThing); 
     } 
    } 

    void CheckSelection(DataGrid grid, object selectedItem) 
    { 
     if (grid.ItemsSource != null) 
     { 
      bool itemInGrid = false; 
      foreach (var item in grid.ItemsSource) 
      { 
       if (item == selectedItem) 
       { 
        itemInGrid = true; 
        break; 
       } 
      } 

      if (!itemInGrid) // clear selection 
      { 
       grid.SelectedItem = null; 

       // not sure why, but this causes the highlight to clear. Doesn't work otherwise 
       grid.IsEnabled = false; 
       grid.IsEnabled = true; 
      } 
     } 
    }