如何在ViewModel中订阅PropertyChanged事件?

kat*_*tit 19 c# mvvm inotifypropertychanged

我有封装的核心功能 ViewModelBase

现在我想查看ViewModelBase引发PropertyChanged事件的时间并对其进行操作.例如,在ViewModelBase上更改了一个属性时 - 我想在ViewModel上更改属性

我该如何实现这一目标?

public class MaintainGroupViewModel : BaseViewModel<MEMGroup>
    {


public abstract class BaseViewModel<T> : NotificationObject, INavigationAware
        where T : Entity
    {
Run Code Online (Sandbox Code Playgroud)

Rac*_*hel 58

通常我PropertyChanged在类Constructor中使用register来记录事件

public MyViewModel()
{
    this.PropertyChanged += MyViewModel_PropertyChanged;
}
Run Code Online (Sandbox Code Playgroud)

我的PropertyChanged事件处理程序如下所示:

void MyViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    switch (e.PropertyName)
    {
        case "SomeProperty":
            // Do something
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)


Kie*_*one 12

我担心你有效地对派生类中的属性做一个'手动绑定'(坏)到基类的值(也坏).使用继承的重点是派生类可以访问基类中的东西.使用protected修饰符指示只应对派生类访问的内容.

我建议这个(可能)更正确的方法:

基类:

protected virtual void OnMyValueChanged() { }
Run Code Online (Sandbox Code Playgroud)

派生类:

protected override void OnMyValueChanged() { /* respond here */ }
Run Code Online (Sandbox Code Playgroud)

真的,在你正在编写的那个类的基类中订阅一个事件似乎是令人难以置信的倒退 - 如果你要围绕自己构建自己,那么使用继承而不是组合是什么意思?当事情发生时,你真的要求一个物体告诉自己.方法调用是您应该使用的方法.

"在ViewModelBase上更改一个属性时 - 我想在我的ViewModel上更改属性",......它们是同一个对象!