2013-02-01 166 views
0

我想我知道問題出在哪裏,但我不知道解決方案。Observablecollection更改不會觸發更新

我有一個可觀察的集合,我在WPF DataGrid中填充。 然後,我實現了將DataGrid中的行拖放到子網格的拖放操作。 如果行拖動到另一個網我更改ObservableCollection的值,然後顯示 這樣的基礎數據:

   var q = from standard in DispatchResult 
         where DispatchResult.Route == RouteName 
         select standard; 

       dgRoutedData.ItemsSource = q; 

我想,我的ItemsSource爲上述LINQ查詢的結果打破了整個自動通知從可觀察的集合,所以如何獲得datagrids顯示過濾視圖,實際上將更新項目時,其「路線」值更改?

+1

我想這應該是足夠的(帶過濾謂詞和烤等功能的專用支持字段): [如何:在DataGrid控件中對數據進行分組,排序和篩選](http://msdn.microsoft.com/zh-cn/library/dd833072.aspx)。 – Jon

+0

你打電話通知Proeprty改變了事件?, –

+0

謝謝喬恩,這個伎倆。發佈它作爲回覆,我會將其作爲答案。 – JaggenSWE

回答

1

您需要通知已發生變化 - 你總是可以嘗試包裝linq查詢的新結果ObservableCollection

eg

var col = new ObservableCollection<DispatchResult>(); 
col.AddRange(q); 
dgRoutedData.ItemsSource = col; 

(這有你需要在新觀察到的操作與以前觀察到的不會提高項目改變事件的新觀察到的缺點)

或者只是清除/並重新添加到現有的採集。

我假設儘管你已經避免了這種情況,因爲原始集合包含你想要在刪除過濾器後過濾'返回'的項目。在這種情況下,您可能希望保留一個專用的後臺字段來保存實際數據,並使用ObservableCollection<T>作爲該後臺字段上的過濾窗口。

例如

_myList = new List<MyObject>(); // Populate it etc 
SomeObservable.Clear(); 
SomeObservable.AddRange(from item in _myList where item.ID == 1 select item); 

或者不重新發明輪子,用PagedCollectionView有人建議它包裝上述功能

0

刷新在支持obvservable收集的物品(collection.Clear(); collection.AddAll(Q)),而不是改變網格的ItemsSource參考

相關問題