gpt4 book ai didi

c# - 使用基于 Entity Framework 一对多属性的 ObservableCollection

转载 作者:太空狗 更新时间:2023-10-30 01:17:02 24 4
gpt4 key购买 nike

在 MVVM 中使用 WPF。我有一个带有 CurrentItem 属性的 ViewModel。这是一个直接从 Entity Framework 中提取的 Item 对象。 Item 具有 Property 对象的集合。

public virtual ICollection<Property> Properties { get; set; }

在 View 中,我需要用户能够从该集合中添加和删除对象。为此,我需要创建一个 ObservableCollection<Property> ,我们称之为 ItemProperties。

有多种方法可以做到这一点。最明显的是添加一个 ObservableCollection<Property> ViewModel 上的属性。然后在构造函数中填充它,如下所示:

ItemProperties = new ObservableCollection<Property>(CurrentItem.Properties);

也可以创建一个位于真实集合之上的 ObservableCollection 包装器:

public ObservableCollection<Property> ItemProperties
{
get
{
return new ObservableCollection<Property>(CurrentItem.Properties);
}
set
{
CurrentItem.Properties = value.ToList();
OnPropertyChanged("ItemProperties");
}
}

这有它自己的问题。你不能只是 Add()到这个系列,因为它会 get首先,意味着集合保持不变。因此,您要么必须启动一个新集合,添加到该集合,然后将其值分配给该属性,要么提高 OnPropertyChanged属性(property)外的事件。其中任何一个听起来也像是维护问题。

是否有更有效的方法可以让您直接访问 EF 属性列表?

最佳答案

在这一点上你有数据层和 Presentation 之间解耦的优势,不需要旋转集合。

尝试 LoadedEvent 从服务器加载数据。示例事件如下

 private ObservableCollection<Property> _itemProperties;

public ObservableCollection<Property> ItemProperties
{
get { return _itemProperties; }
set
{
_itemProperties= value;
RaisePropertyChanged(() => ItemProperties);
}
}

加载事件

var result= await Task.Run(() => MyBusiness.GetMyData());
//Map to the viewModel if necessary

ItemProperties = result;

加入收藏

var isSuccess = await Task.Run(()=>MyBusiness.Insert(x));
if(isSuccess)
{
ItemProperties.Add(x);
}

关于c# - 使用基于 Entity Framework 一对多属性的 ObservableCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33077159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com