MvvmToolkit的使用

50 篇文章 0 订阅
本文介绍了MvvmLight库停止更新后的替代方案——Toolkit,重点讲解了如何使用ObservableObject和特性来简化ViewModel管理,以及如何利用RelayCommand和异步处理。
摘要由CSDN通过智能技术生成

背景:MvvmLight不更新了,用Toolkit代替

1、首先下载好社区版本的NuGet包

2、ViewModel中需要继承ObservableObject,查看ObservableObject可以看到里面有实现好InotifyPropertyChanged。

3、对于属性的set,可以简写成一行:set => SetProperty(ref title, value); 

4、还有RelayCommnd也是直接用就行

        -- 这里有个需要注意的点就是:RelayCommand的第二个参数无法实时跟IsEnable属性绑定,因此需要在IsEnable更新的时候调用RelayCommand的NotifyCanExecuteChanged()方法进行通知Button

然后在8.0版本后推出了新的功能(要将ViewModel改为分布类)

[ObservableProperty]
private string title = "Hello world";   // 这个字段需要小写,同时这里是分布类,所以Title属性也是存在的,需要的话就直接调用就行,跟自己手动实现的一样的

        --直接写个特性上去给字段就可以实现set的功能,也是包含通知的

        -- 将鼠标放到上面就提示实现了这些

对IsEnable是需要通知Button通知CanExecute的,那就再加上特性[NotifyCanExecuteChangedFor(nameof(ButtonClickCommand))]

特性[RelayCommand]

将这个特性加到方法上,就可以自动生成一个方法名+Command的RelayCommand

在分析器中可以看到

        -- 因此在xmal中直接绑定就行

 那么像上面的RelayCommand的第二个参数CanExecute怎么办呢?

[ObservableProperty]
[NotifyCanExecuteChangedFor(nameof(ButtonClickCommand))] // 添加上这个才能通知Command更新
private bool isEnable;

[RelayCommand(CanExecute = nameof(CanButtonClick))]  // 指向方法更加灵活,原本就是Action
private void ButtonClick()  // 可以异步,比如设置个几秒后再改变Title
{
    Title = "Goodbye";
}

private bool CanButtonClick() => IsEnable;

异步版本

[RelayCommand(CanExecute = nameof(CanButtonClick))]
private async Task ButtonClick()
{
    await Task.Delay(1500);
    Title = "Goodbye";
}

         -- 实现的就是等个1.5s再操作,模拟一下数据的处理需要的时间,这个时候可以拓展一下地在前端显示个转圈圈,实现起来就是绑定一下ButtonClickCommand的IsRunning属性就行

特性[NotifyCanExecuteChangedFor]的使用就是可以通过属性通知属性

        title更新-->Caption也更新

[ObservableProperty]
[NotifyPropertyChangedFor(nameof(Caption))]
private string title = "Hello world";   // 这个字段需要小写

public string Caption => $"Title: {Title}";

通过反编译可以看出来是有实现的

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值