翼度科技»论坛 编程开发 .net 查看内容

CommunityToolkit.Mvvm8.1 viewmodel使用-旧式写法(2)

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
 
本系列文章导航 
 
0.说明

CommunityToolkit.Mvvm8.1有一个重大更新的功能:源生成器功能,它极大简化我们的mvvm代码
但是本篇先总结一下原写法,下篇再总结源生成器功能
 
1.模型定义

必须继承:ObservableObject
 
2.viewmodel代码实现

几个关键点:
SetProperty是给属性赋值,并且通知更改通知
ButtonClickCommand.NotifyCanExecuteChanged(); //通知命令 已经改变
RelayCommand ButtonClickCommand //定义命令
  1. namespace WpfDemoNet6.Demo
  2. {
  3.     public class DataViewModel1 : ObservableObject
  4.     {
  5.         private string title = "hello";
  6.         public string Title
  7.         {
  8.             get
  9.             {
  10.                 return title;
  11.             }
  12.             set
  13.             {
  14.                 //title = value;
  15.                 //PropertyChanged?.Invoke( this , new PropertyChangedEventArgs( "Name" ) );
  16.                 //SetProperty 相当与设置值,并且PropertyChanged通知调用
  17.                 SetProperty( ref title , value );
  18.             }
  19.         }
  20.         private bool isEnabled = false;
  21.         /// <summary>
  22.         /// 是否可以使用
  23.         /// </summary>
  24.         public bool IsEnabled
  25.         {
  26.             get => isEnabled;
  27.             set
  28.             {
  29.                 SetProperty( ref isEnabled , value );
  30.                 //通知命令 已经改变
  31.                 ButtonClickCommand.NotifyCanExecuteChanged();
  32.             }
  33.         }
  34.         /// <summary>
  35.         /// 命令
  36.         /// </summary>
  37.         public RelayCommand ButtonClickCommand
  38.         {
  39.             get;
  40.         }
  41.         public DataViewModel1 ()
  42.         {
  43.             //RelayCommand的第一个参数是命令调用语句
  44.             //              第2个参数(可选)是否允许使用
  45.             ButtonClickCommand = new RelayCommand( () =>
  46.             {
  47.                 //点击按钮,修改标题
  48.                 Title = "hello(改)";
  49.             } , () =>
  50.             {
  51.                 return IsEnabled;
  52.             } );
  53.             ButtonClickCommandPar = new RelayCommand<double>( ( double val ) =>
  54.             {
  55.                 Title = $"hello(改):{val}";
  56.             } );
  57.         }
  58.         public RelayCommand<double> ButtonClickCommandPar
  59.         {
  60.             get;
  61.         }
  62.     }
  63. }
复制代码
 
3.异步命令

异步命令会自动控制控件的可见性,并且提供一个IsRunning属性可以判断异步是否完成
  1. public DataViewModel1 ()
  2. {
  3.     AsyncButtonClickCommand = new AsyncRelayCommand( RunTxtAsync );
  4.     AsyncButtonParClickCommand = new AsyncRelayCommand<double>( RunTxtParAsync );
  5. }
  6. /*
  7. 特别说明:异步命令会自动控制控件的可见性,并且提供一个IsRunning属性可以判断异步是否完成
  8. */
  9. /// <summary>
  10. /// 命令
  11. /// </summary>
  12. public IAsyncRelayCommand AsyncButtonClickCommand
  13. {
  14.     get;
  15. }
  16. private async Task RunTxtAsync ()
  17. {
  18.     await Task.Delay( 4800 );
  19.     Title = "hello(Task改)";
  20. }
  21. /// <summary>
  22. /// 命令(带参数的)
  23. /// </summary>
  24. public IAsyncRelayCommand<double> AsyncButtonParClickCommand
  25. {
  26.     get;
  27. }
  28. private async Task RunTxtParAsync ( double val )
  29. {
  30.     await Task.Delay( 4800 );
  31.     Title = $"hello(Task改):{val}";
  32. }
复制代码
[code][/code] 
A.Sql Server2005 Transact-SQL 新兵器学习
B.MCAD学习
C.代码阅读总结
D.ASP.NET状态管理
E.DB(数据库)
F.WAP
G.WinForm
H.Flex
我的好文推荐FlexAir开源版-全球免费多人视频聊天室,免费网络远程多人视频会议系统((Flex,Fms3联合开发))
Sql Server2005 Transact-SQL 新兵器学习总结之-总结
MS SQL数据库备份和恢复存储过程(加强版本)
sql server中分布式查询随笔(链接服务器(sp_addlinkedserver)和远程登录映射(sp_addlinkedsrvlogin)使用小总结)
ASP.NET2.0国际化/本地化应用程序的实现总结(多语言,多文化页面的实现)
WAP开发资料站(最新更新)
自定义格式字符串随笔(IFormattable,IFormatProvider,ICustomFormatter三接口的实现)
Mcad学习笔记之异步编程(AsyncCallback委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结)
Mcad学习笔记之通过反射调用類的方法,屬性,字段,索引器(2種方法)
Mcad学习笔记之序列化(2进制和Soap序列化)
Mcad学习笔记之委托再理解(delegate的构造器,BeginInvoke,EndInvoke,Invoke4个方法的探讨)
ASP.NET状态管理之一(概括篇)
Flex,Fms学习笔记

希望上面提到的知识对您有所提示,同时欢迎交流和指正
作者:aierong
出处:http://www.cnblogs.com/aierong
贴子以"现状"提供且没有任何担保,同时也没有授予任何权利!
本文版权归作者所有,欢迎转载!
原创技术文章和心得,转载注明出处!这也是对原创者的尊重!


来源:https://www.cnblogs.com/aierong/archive/2023/04/09/17300025.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具