C# ObservableCollection:管理事件
在MVVM模式下工作C# ObservableCollection:管理事件,c#,wpf,events,mvvm,observablecollection,C#,Wpf,Events,Mvvm,Observablecollection,在MVVM模式下工作 T是一个类,来自我的edmx文件(实体框架) O是一个可观察的集合 O由数据库中的所有T填充 然后,用户从GUI编辑T的一些字段 如何启动此事件 我不想编辑我的edmx文件,我更喜欢将其保留为生成的文件。因此,这意味着我不能使用这样的东西,因为我应该修改我的模型,实现INotifyPropertyChanged我认为您不应该在视图(GUI)中直接与EDMX中的模型对象交互。创建视图模型以封装模型类T,使新视图模型实现INotifyPropertyChanged,并在可观察集
T
是一个类,来自我的edmx文件(实体框架)
O
是一个可观察的集合
O
由数据库中的所有T
填充
然后,用户从GUI编辑T
的一些字段
如何启动此事件
我不想编辑我的edmx文件,我更喜欢将其保留为生成的文件。因此,这意味着我不能使用这样的东西,因为我应该修改我的模型,实现
INotifyPropertyChanged
我认为您不应该在视图(GUI)中直接与EDMX中的模型对象交互。创建视图模型以封装模型类T
,使新视图模型实现INotifyPropertyChanged
,并在可观察集合中使用该视图模型。创建视图模型时传入模型对象。在视图模型上更改属性时,更新模型对象并触发PropertyChanged
事件(我使用YourEdmxClass
代替T
,因为T
通常与泛型一起使用):
恐怕我手头没有。在任何处理持久化模型对象的MVVM教程中都应该提到这一点,实际上,视图与视图模型交互,视图模型与模型交互。您的视图模型充当中间人-它使模型中的数据可用于视图的显示和更改,并处理验证和验证等事项。您很幸运,几天前我回答了一个关于这个问题的问题:只需将IRaisePropertyChanged
添加到您的视图模型中:public-class-viewmodeldmx:TabImpianti,在集合中编辑视图模型上的属性时,不会激发IRaisePropertyChanged
CollectionChanged
的属性-视图模型上的PropertyChanged
应激发。很好,很高兴它能工作。我认为这是最好的办法。您需要为所有EDMX对象提供视图模型,这有点麻烦,但是,将视图模型代码添加到EDMX对象中,这并不是一个好办法。如前所述,您可以在视图模型中进行验证和验证,并进一步从模型中提取数据。
public class YourEdmxClassViewModel : ViewModel
{
private YourEdmxClass model;
public YourEdmxClassViewModel(YourEdmxClass model)
{
this.model = model;
}
public int SomeProperty
{
get { return this.model.SomeProperty; }
set
{
this.model.SomeProperty = value;
this.RaisePropertyChanged(() => this.SomeProperty);
}
}
}