属性更改时在视图模型中执行方法
本文关键字:模型 执行 方法 视图 属性 | 更新日期: 2023-09-27 18:18:44
我有一些字符串属性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。
我应该如何运行以正确方式处理查否定属性的方法?我是否应该在 ViewModel 中订阅PropertyChanged
事件,然后对字符串属性名称使用switch
来检测实际更改的属性,然后将其用作值?还是我应该从 setter 运行我的方法?
这种交互是否有任何模式?
由于如果属性已更改,您的 SetField 方法将返回 true,因此如果返回 true,我将在 setter 中调用我的方法。
...
public string Name
{
get { return _name; }
set
{
if (SetField(ref _name, value, "Name"))
MyMethod();
}
}
...