我一直在使用自己的ViewModelBase
and 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()
?)