我有一些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运行我的方法?
这种互动是否有任何模式?
答案 0 :(得分:3)
如果属性发生了变化,你的SetField方法返回true,如果返回true,我会在setter中调用我的方法。
...
public string Name
{
get { return _name; }
set
{
if (SetField(ref _name, value, "Name"))
MyMethod();
}
}
...