WPF MVVM模式开发实现简明教程 4 ViewModelBase
WPF MVVM模式开发实现简明教程 2 初识 INotifyPropertyChanged
WPF MVVM模式开发实现简明教程 3-1 BaseCommand
WPF MVVM模式开发实现简明教程 4 ViewModelBase
WPF MVVM模式开发简明实现教程 5 使用MultiValueConverter进行多参数事件绑定
WPF MVVM模式开发简明实现教程 7 DevExpress MVVM
如果多个ViewModel,则每个都要继承INotifyPropertyChanged,并且有如下相同的方法
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
ViewModelBase 就是为了简化以上代码而出现的
版本1
直接把之前的代码放到一个类里,
调用时
public class ButtonViewModel : ViewModelBase
ViewModelBase 代码
using System.ComponentModel;
using System.Runtime.CompilerServices;
public abstract class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
属性
private string buttonContent;
public string ButtonContent
{
get { return buttonContent; }
set
{
buttonContent = value;
OnPropertyChanged("ButtonContent");
}
}
版本2
优化,不用传propertyName 了
using System.ComponentModel;
using System.Runtime.CompilerServices;
public abstract class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
属性
private string buttonContent;
public string ButtonContent
{
get { return buttonContent; }
set
{
buttonContent = value;
OnPropertyChanged();
}
}
版本3
增加
protected virtual bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = "")
{
if (EqualityComparer<T>.Default.Equals(storage, value))
return false;
storage = value;
this.OnPropertyChanged(propertyName);
return true;
}
属性
private string buttonContent;
public string ButtonContent
{
get { return buttonContent; }
set { SetProperty(ref buttonContent, value); }
}
进一步简化代码
还有更简化的,可以参考后面的DevExpress版本的,当然也可以自己实现

浙公网安备 33010602011771号