正在移动到CollectionViewSource中的特定项
本文关键字:CollectionViewSource 移动 | 更新日期: 2023-09-27 18:29:14
我是WPF的新手,正在尝试使用MVVM。我在我的视图模型中使用CollectionViewSource来对抗使用实体框架的SQL数据库。
假设我有这样的课程:
public class People
{
public int Id { get; set; }
public string name { get; set; }
}
假设这就是我在数据库中的内容:
ID:名称:
兔八哥
米克·贾格尔
米老鼠
唐老鸭
高飞
Elmer Fudd
达菲鸭
猪肉
现在使用CollectionViewSource.View,我知道如何使用MoveCurrentToNext()、MoveCurrentToPrevious()等方法,这很好,但我需要转移到一个特定的名称,例如Donald Duck。所以如果我这样做:
dbContext.Peoples.Find(4);
或者如果我做这个
dbContext.Peoples.Where(p => p.Name == "Donald Duck").FirstOrDefault();
这将使用实体框架从数据库中为我获取正确的对象。然而,如果我这样做:
CollectionViewSource.View.MoveCurrentTo(dbContext.Peoples.Find(4));
它不会移动,并且CollectionViewSource.View.CurrentItem为null。
那么,人们将如何转移到正确的项目?
我想这是因为调用dbContext.Peoples.Find(4)
时获得的引用与CollectionView源集合中的引用不同。
CollectionViewSource.View.MoveCurrentTo
(collectionView的其他"MoveTo"方法)需要一个与源集合中的参数引用相同的参数
然后,如果检索对象的dbContext
方法返回一个新实例或与CollectionView中的实例不同的实例,则这将不起作用。
因此,使用中间集合作为集合视图的源,以保持对对象的唯一引用(并在数据访问上下文中的对象发生更改时更新这些引用),或者尝试在People
类中实现相等成员(从未尝试过以后的解决方案,但应该有效)。
此外,试着在你的问题中添加一些完整的代码片段,而不是我们无法真正看到问题所在的代码片段。