2016-01-06 58 views
0

我是WPF新手,我正在嘗試使用MVVM。我在我的視圖模型中使用CollectionViewSource來對照使用Entity Framework的SQL數據庫。移動到CollectionViewSource中的特定項目?

所以我們可以說我有這個類:

public class People 
{ 
    public int Id { get; set; } 
    public string name { get; set; } 
} 

而且可以說,這是我在數據庫:

ID:名稱:

  1. 兔八哥

  2. Mick Jagger

  3. 米老鼠

  4. 唐老鴨

  5. 高飛

  6. 埃爾默法德語

  7. 達菲鴨

  8. 豬小弟

現在使用CollectionViewSource.View,我知道如何使用MoveCurrentToNext(),MoveCurrentToPrevious()等方法,這很好,但我需要移動到一個特定的名稱,例如唐老鴨。所以,如果我這樣做:

dbContext.Peoples.Find(4); 

或者,如果我這樣做

dbContext.Peoples.Where(p => p.Name == "Donald Duck").FirstOrDefault(); 

這將讓我使用實體框架的數據庫對象的權利。但是,如果我這樣做:

CollectionViewSource.View.MoveCurrentTo(dbContext.Peoples.Find(4)); 

它不會移動,並且CollectionViewSource.View.CurrentItem爲空。

那麼如何有人搬到正確的項目?

回答

0

我想這是因爲您調用dbContext.Peoples.Find(4)時得到的引用與您在CollectionView源集合中獲得的引用不同。

CollectionViewSource.View.MoveCurrentTo(collectionView的其他'MoveTo'方法)需要的參數與源集合中的參數相同。

然後,如果您的dbContext方法檢索到一個對象返回一個新的實例或與您的CollectionView中的實例不同的實例,這將不起作用。

因此,無論是使用中間集合作爲集合視圖的來源,以保持對對象的唯一引用(並在數據訪問上下文中的對象更改時更新這些引用),或者嘗試在您的People類中實現相等成員(從未嘗試過以後的解決方案,但應該可以工作)

此外,嘗試在您的問題中添加一些完整的代碼片段,而不是代碼片段,我們無法真正看到問題的確切位置。

+0

你說得對。當你第一次說這個參考文獻每次我打電話的時候都不一樣的時候,它就像一堆磚頭一樣打擊我! DUH!因此,我只是創建列表,使用相同的列表將其引用到CollectionView.Source,並使用列表。找到(p => p.Id == 4)並且工作正常! – deafie

+0

很高興這有助於; ) – Bruno

相關問題