当前位置:网站首页 / wpf in net6 / 正文

ay wpf in net6 第3天 - 引入CommunityToolkitMvvm 8.0 - ICommand升级

时间:2022年05月14日 | 作者 : aaronyang | 分类 : wpf in net6 | 浏览: 1372次 | 评论 0

community-toolkit 8 还有很多功能

除了比7版本的增量式源码生成器,还加了很多

nuget的项目引用,framework版本在packages.config,在NET6在程序集文件里,双击AyWpfNet6

image.png

简写ICommand

C#

     [ICommand]
        private void Show2()
        {
            //await Task.Delay(2000);
            Output = $"我是show2,你好,{StuName} 班级 {StuClass}";
        }

源码生成器生成如下

image.pngxaml

  <Button Content="显示2" Command="{Binding Show2Command}"/>

image.png

源生成器将负责根据带注释的方法创建正确的Show2Command 属性。 

此外,还可以指定 CanExecute 方法,也可以控制异步命令的并发级别。 


在属性变化的地方添加canexecute通知,修改diamante如下

        [ObservableProperty]
        [AlsoNotifyCanExecuteFor(nameof(ShowInformation),nameof(Show2Command))]
        [AlsoNotifyChangeFor(nameof(Info))]
        private string stuName;
        
         private bool CanShow2()
        {
            return !string.IsNullOrWhiteSpace(StuName);
        }


        [ICommand(CanExecute =nameof(CanShow2))]
        private void Show2()
        {

            //await Task.Delay(2000);
            Output = $"我是show2,你好,{StuName} 班级 {StuClass}";
        }

我们修改ShowInformation名字,改规范,ShowInformationCommand

OK,这两部完成,canexecute的效果也加上了


添加Show3的假的异步方法

        [ICommand]
        private async void Show3()
        {
            await Task.Delay(2000);
            Output = $"我是show3,你好,{StuName} 班级 {StuClass}";
        }

这样前台命令绑定 Show3Command3就行了,CanExecute参考上面的写法。


刚发现源码有个init

image.png

ZA78}V~BA2_D[I1HJ4`PZ_V.png


修改Show3方法

        int clickcount = 0;
        [ICommand]
        private async void Show3()
        {
            //Show3Command
            clickcount++;
            await Task.Delay(2000);
            Output = $"我是show3,你好,{StuName} 班级 {StuClass},被单击了{clickcount}次";
        }

连续按钮3次,2秒后,显示如下

image.png

此时没有遮罩,这种效果不是想要的


如果对命令使用异步方法,现在可以设置 AllowConcurrentExecutions = false 以使生成的命令不会被允许同时运行多次。

        int clickcount = 0;
        [ICommand(AllowConcurrentExecutions =false)]
        private async Task Show3()
        {
            //Show3Command
            clickcount++;
            await Task.Delay(2000);
            Output = $"我是show3,你好,{StuName} 班级 {StuClass},被单击了{clickcount}次";
        }

效果

单击后,按钮自动不可用了

image.png

然后执行完成后,按钮可用性恢复

image.png


C# 没有多重继承,这有时会成为障碍。 如果有一个必须从特定类型继承的视图模型,但您还想在其中注入 INotifyPropertyChanged 支持,或者让它也从 ObservableRecipient 继承以访问其 API,该怎么办? MVVM 工具包现在包括一种解决此问题的方法,方法是引入代码生成属性,允许将这些类型的逻辑注入任意类。 它们是 [INotifyPropertyChanged]、[ObservableObject] 和 [ObservableRecipient]。


将它们添加到一个类将导致 MVVM Toolkit 源代码生成器将该类型的所有逻辑包含到该类中,就好像该类也继承自该类型一样。 例如:

[INotifyPropertyChanged]

class MyObservableViewModel : DatabaseItem

{

}

注意:MVVM 工具包中的源代码生成器需要 Roslyn 4.x 才能运行。 因此,需要 VS2022 或其他支持 Roslyn 4.x 的 IDE。 仍然支持在 VS2019 或其他旧 IDE 上使用 MVVM 工具包,但源代码生成器将在那里自动禁用,因此不支持依赖它们的功能。









推荐您阅读更多有关于“wpf in net6,”的文章

猜你喜欢

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  查看权限

抖音:wpfui 工作wpf,兴趣学习flutter

目前在合肥市某公司上班,已经厌弃,如果你的公司看的上我,加我QQ私聊

AYUI8全源码 Github地址:前往获取

杨洋(AaronYang简称AY,安徽六安人)AY唯一QQ:875556003和AY交流

高中学历,2010年开始web开发,2015年1月17日开始学习WPF

声明:AYUI7个人与商用免费,源码可购买。部分DEMO不免费

不是从我处购买的ayui7源码,我不提供任何技术服务,如果你举报从哪里买的,我可以帮你转正为我的客户,并送demo

查看捐赠

AYUI7.X MVC教程 更新如下:

第一课 第二课 程序加密教程

标签列表