C# 属性更改时在viewmodel中执行方法

C# 属性更改时在viewmodel中执行方法,c#,wpf,mvvm,C#,Wpf,Mvvm,我有一些ViewModel带有字符串属性Name MyViewModel继承自ViewModelBase:INotifyPropertyChanged ... private string _name; public string Name { get { return _name; } set { SetField(ref _name, value, "Name"); } } ... public class ViewMode

我有一些
ViewModel
带有字符串属性
Name

My
ViewModel
继承自
ViewModelBase:INotifyPropertyChanged

...
    private string _name;
    public string Name
    {
        get { return _name; }
        set { SetField(ref _name, value, "Name"); }
    }

...

public class ViewModelBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }

    protected bool SetField<T>(ref T field, T value, string propertyName)
    {
        if (EqualityComparer<T>.Default.Equals(field, value)) return false;
        field = value;
        OnPropertyChanged(propertyName);
            return true;
    }
}
。。。
私有字符串\u名称;
公共字符串名
{
获取{return\u name;}
set{SetField(ref{u name,value,“name”);}
}
...
公共类ViewModelBase:INotifyPropertyChanged
{
公共事件属性更改事件处理程序属性更改;
受保护的虚拟void OnPropertyChanged(字符串propertyName)
{
PropertyChangedEventHandler处理程序=PropertyChanged;
if(handler!=null)handler(这是新的PropertyChangedEventArgs(propertyName));
}
受保护的布尔设置字段(参考T字段、T值、字符串属性名称)
{
if(EqualityComparer.Default.Equals(字段,值))返回false;
字段=值;
OnPropertyChanged(propertyName);
返回true;
}
}
当我的属性
Name
更改其值(在用户输入时)时,我想执行一些逻辑。我的ViewModel将有许多这样的属性,我将有许多具有相同属性处理的ViewModel

我应该如何以正确的方式运行处理更改属性的方法? 我是否应该订阅ViewModel中的
PropertyChanged
事件,然后使用字符串属性名称上的
开关来检测实际更改的属性,然后使用它的值?
还是应该从setter运行我的方法


这种交互有什么模式吗?

因为如果属性发生更改,SetField方法将返回true,如果返回true,我将在setter中调用我的方法

...
public string Name
{
    get { return _name; }
    set 
    { 
        if (SetField(ref _name, value, "Name"))
            MyMethod();
    }
}
...

我知道我可以这样做,但我不明白它在MVVM方面是正确的吗?如果我做对了,我的属性应该不包含任何逻辑,并且表现得好像他们对viewmodel的其余部分一无所知?或者我错了?虽然MVVM主要打算将与数据交互的逻辑和与UI交互的逻辑分开,但这并不意味着您应该照本宣科。虽然您可以在vm中使用命令,然后在XAML中使用属性更改触发器执行命令,但就可读性而言,它并不是最干净的解决方案。在我看来,不应该为了MVVM的纯度而牺牲清晰度。