目录
1 委托会将通知该属性绑定的控件,并传递新属性值,更新UI显示
2 参数设置为返回成员名特性的字符串,该特性会自动返回调用该方法的成员名称,如属性、方法等
一 上章回顾
一 MateralDesign特点
二 MateralDesign介绍
三 导航链接类
四 总结
五 下章预告
二 实现INotifyPropertyChanged接口
public abstract class ViewModelBase : INotifyPropertyChanged
三 属性变更委托
public event PropertyChangedEventHandler? PropertyChanged;
四 属性变更
1 委托会将通知该属性绑定的控件,并传递新属性值,更新UI显示
protected void OnPropertyChanged([CallerMemberName] string? propertyName = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
2 参数设置为返回成员名特性的字符串,该特性会自动返回调用该方法的成员名称,如属性、方法等
[CallerMemberName] string? propertyName = null
五 设置属性
1 方法介绍
传入后备字段和设置值并自动获取调用成员名称后,先判断对象是否相等,不相等更新值,并触发属性变更通知,返回true
protected virtual bool SetProperty<T>(ref T member, T value, [CallerMemberName] string? propertyName = null)
{
if (EqualityComparer<T>.Default.Equals(member, value))
{
return false;
}member = value;
OnPropertyChanged(propertyName);
return true;
}
2 按引用传递参数
意味着在方法内部对参数的修改会反映到调用方法的变量上,有两个主要注意事项:传入参数之前必须赋值,并且在调用方法时必须显式使用 ref 关键字
ref T member
3 返回成员名特性
参数设置为返回成员名特性的字符串,该特性会自动返回调用该方法的成员名称,如属性、方法等
[CallerMemberName] string? propertyName = null
4 如果值相等,不进行任何更改
if (EqualityComparer<T>.Default.Equals(member, value))
{
return false;
}
5 如果值不等,更新该属性,调用属性变更方法
member = value;
OnPropertyChanged(propertyName);
return true;
六 总结
以上就是MaterialDesign中ModelViewBase类的介绍,本文仅仅简单介绍了ModelViewBase的作用,而实际使用时可以扩展到各种丰富功能的视图模型,只需要新建类继承该接口,均实现通知属性变更功能,双向绑定UI后,可自动即使更新UI显示,非常便捷高效。
七 下章预告
下一章我会教大家如何创建示范项目DemoItem类,并实现通知属性变更功能,与UI控件元素进行双向绑定后,属性变更时将会自动实时更新UI显示