0

我一直在使用自己的ViewModelBaseand RelayCommand,最近我安装了 MVVMLight 以及 PropertyChanged.Fody。如果您使用的是自定义设置器,PropertyChanged.Fody 似乎不会通知,所以我确实需要OnPropertyChanged自己在某个地方实现。

public NotifiableViewModelBase CurrentViewModel
{
    get => _currentViewModel;
    set
    {
        // store the previous viewmodel when the viewmodel is changed.
        PreviousViewModel = _currentViewModel;
        _currentViewModel = value;
        OnPropertyChanged();
    }
}

这是一个仍然继承自我自己的类的成员ViewModelBase

public abstract class NotifiableViewModelBase : INotifyPropertyChanged
{

    protected NotifiableViewModelBase() { }

    public virtual string DisplayName
    {
        get;
        protected set;
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "")
    {

        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            PropertyChangedEventArgs e = new PropertyChangedEventArgs(propertyName);
            handler(this, e);
        }
    }
}

我想让这个类从 MVVMLight's 继承ViewModelBase,但如果我这样做,它会说PropertyChanged隐藏其继承的成员,当我删除该事件的声明(使用继承的成员)时,我在OnPropertyChanged方法中遇到错误,说PropertyChanged只能用于 += 或 -= 的左侧。

我已经设法通过声明PropertyChanged为 a来解决这个问题new event,这允许我从 MVVMLight 继承ViewModelBase,但这对我来说不合适。

我是在使用new event关键字“做对了”,还是对如何PropertyChanged按预期使用有一些答案OnPropertyChanged

或者,有没有办法编写我的自定义设置器并让通知工作而无需显式调用OnPropertyChanged()?)

4

0 回答 0