C# ObservableCollection:管理事件

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,并在可观察集

在MVVM模式下工作

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);
        }
    }
}