正在移动到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:名称:

  1. 兔八哥

  2. 米克·贾格尔

  3. 米老鼠

  4. 唐老鸭

  5. 高飞

  6. Elmer Fudd

  7. 达菲鸭

  8. 猪肉

现在使用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。

那么,人们将如何转移到正确的项目?

正在移动到CollectionViewSource中的特定项

我想这是因为调用dbContext.Peoples.Find(4)时获得的引用与CollectionView源集合中的引用不同。

CollectionViewSource.View.MoveCurrentTo(collectionView的其他"MoveTo"方法)需要一个与源集合中的参数引用相同的参数

然后,如果检索对象的dbContext方法返回一个新实例或与CollectionView中的实例不同的实例,则这将不起作用。

因此,使用中间集合作为集合视图的源,以保持对对象的唯一引用(并在数据访问上下文中的对象发生更改时更新这些引用),或者尝试在People类中实现相等成员(从未尝试过以后的解决方案,但应该有效)。

此外,试着在你的问题中添加一些完整的代码片段,而不是我们无法真正看到问题所在的代码片段。

相关文章:
  • 没有找到相关文章