2016-01-06 61 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