MaterialDesign合集(第三章 ViewModelBase视图模型基类)

目录

一 上章回顾 

二 实现INotifyPropertyChanged接口

三  属性变更委托

四 属性变更

1  委托会将通知该属性绑定的控件,并传递新属性值,更新UI显示

2 参数设置为返回成员名特性的字符串,该特性会自动返回调用该方法的成员名称,如属性、方法等

五 设置属性

1 方法介绍

2 按引用传递参数

3 返回成员名特性

4 如果值相等,不进行任何更改

5 如果值不等,更新该属性,调用属性变更方法

六 总结

七 下章预告


一 上章回顾 

一 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显示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值