引用
在使用BaseViewModel时需要引用以下包:
using System.ComponentModel;
using System.Runtime.CompilerServices;
另外,如果在使用BaseViewModel时需要使用到异步编程(如使用async和await关键字),还需要引用以下包:
using System.Threading.Tasks;
BaseViewModel
BaseViewModel 是一个通用的基础类,通常用作 WPF/MVVM 架构中 ViewModel 的基类,其主要作用是提供了一些常用的功能和属性,以减少在具体 ViewModel 中的代码量,提高代码的复用性。
下面是一个简单的 BaseViewModel 示例:
public class BaseViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
该 BaseViewModel 类实现了 INotifyPropertyChanged 接口,以支持 WPF 数据绑定机制。同时,提供了 RaisePropertyChanged 方法,用于通知数据绑定系统属性值的更改。使用 CallerMemberName 特性可以避免手动输入属性名称,减少出错的概率。
在具体的 ViewModel 类中,只需要继承该 BaseViewModel 类即可使用这些通用的属性和方法,例如:
public class LoginViewModel : BaseViewModel
{
private string _username;
public string Username
{
get => _username;
set
{
_username = value;
RaisePropertyChanged();
}
}
}
该 LoginViewModel 类继承了 BaseViewModel 类,并实现了一个字符串类型的 Username 属性,通过调用 RaisePropertyChanged 方法通知数据绑定系统属性值的更改。
using System.ComponentModel;
using System.Runtime.CompilerServices;
public class BaseViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected bool SetProperty<T>(ref T backingField, T value, [CallerMemberName] string propertyName = "")
{
if (EqualityComparer<T>.Default.Equals(backingField, value)) return false;
backingField = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
return true;
}
}
该方法的作用是为属性设置值,并自动触发 INotifyPropertyChanged 接口的 PropertyChanged 事件,通知数据绑定系统该属性的值已更改。这在 MVVM 模式中非常常见,因为通过数据绑定技术来更新用户界面时,该方法可以帮助我们实现自动更新。
总之,BaseViewModel 类可以帮助我们避免重复编写一些重复的代码,提高代码的可读性和可维护性。