属性更改时在视图模型中执行方法

本文关键字:模型 执行 方法 视图 属性 | 更新日期: 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();
    }
}
...