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

时间:2015-10-20 19:41:52

标签: c# wpf mvvm

我有一些ViewModel字符串属性Name

我的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;
    }
}

当我的属性Name更改其值(在用户输入上)时,我想执行一些逻辑。我的ViewModel将有很多这样的特性,我将有很多具有相同属性处理的ViewModels。

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

这种互动是否有任何模式?

1 个答案:

答案 0 :(得分:3)

如果属性发生了变化,你的SetField方法返回true,如果返回true,我会在setter中调用我的方法。

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