本系列文章导航

  1. https://www.cnblogs.com/aierong/category/2297596.html

0.说明

CommunityToolkit.Mvvm8.1有一个重大更新的功能:源生成器功能,它极大简化我们的mvvm代码

但是本篇先总结一下原写法,下篇再总结源生成器功能

1.模型定义

必须继承:ObservableObject

2.viewmodel代码实现

几个关键点:

SetProperty是给属性赋值,并且通知更改通知
ButtonClickCommand.NotifyCanExecuteChanged(); //通知命令 已经改变
RelayCommand ButtonClickCommand //定义命令

namespace WpfDemoNet6.Demo
{
public class DataViewModel1 : ObservableObject
{
private string title = "hello"; public string Title
{
get
{
return title;
}
set
{
//title = value;
//PropertyChanged?.Invoke( this , new PropertyChangedEventArgs( "Name" ) ); //SetProperty 相当与设置值,并且PropertyChanged通知调用
SetProperty( ref title , value );
}
} private bool isEnabled = false; /// <summary>
/// 是否可以使用
/// </summary>
public bool IsEnabled
{
get => isEnabled;
set
{
SetProperty( ref isEnabled , value ); //通知命令 已经改变
ButtonClickCommand.NotifyCanExecuteChanged();
}
} /// <summary>
/// 命令
/// </summary>
public RelayCommand ButtonClickCommand
{
get;
} public DataViewModel1 ()
{
//RelayCommand的第一个参数是命令调用语句
// 第2个参数(可选)是否允许使用
ButtonClickCommand = new RelayCommand( () =>
{
//点击按钮,修改标题
Title = "hello(改)";
} , () =>
{
return IsEnabled;
} ); ButtonClickCommandPar = new RelayCommand<double>( ( double val ) =>
{
Title = $"hello(改):{val}";
} );
} public RelayCommand<double> ButtonClickCommandPar
{
get;
}
}
}

3.异步命令

异步命令会自动控制控件的可见性,并且提供一个IsRunning属性可以判断异步是否完成

public DataViewModel1 ()
{
AsyncButtonClickCommand = new AsyncRelayCommand( RunTxtAsync );
AsyncButtonParClickCommand = new AsyncRelayCommand<double>( RunTxtParAsync );
} /*
特别说明:异步命令会自动控制控件的可见性,并且提供一个IsRunning属性可以判断异步是否完成
*/ /// <summary>
/// 命令
/// </summary>
public IAsyncRelayCommand AsyncButtonClickCommand
{
get;
} private async Task RunTxtAsync ()
{
await Task.Delay( 4800 );
Title = "hello(Task改)";
} /// <summary>
/// 命令(带参数的)
/// </summary>
public IAsyncRelayCommand<double> AsyncButtonParClickCommand
{
get;
} private async Task RunTxtParAsync ( double val )
{
await Task.Delay( 4800 );
Title = $"hello(Task改):{val}";
}
<!--
特别说明:异步命令会自动控制控件的可见性,并且提供一个IsRunning属性可以判断异步是否完成
-->
<Button Width="100"
Height="30"
Command="{Binding AsyncButtonClickCommand}"
Content="异步" />
<TextBlock HorizontalAlignment="Center"
FontSize="20"
FontStyle="Italic"
FontWeight="Bold"
Foreground="Green"
Text="loading......"
Visibility="{Binding AsyncButtonClickCommand.IsRunning, Converter={StaticResource myboolconvert}}" />

最新文章

  1. struts2和hibernate整合的小Demo
  2. 关于Java的软引用及弱引用
  3. 【Java】Eclipse导出jar包与javadoc
  4. RMAN增量备份-备份保留策略-设置备份集属性
  5. (转)Eclipse中使用Ant
  6. HDU 5620 KK&#39;s Steel
  7. css div旋转之后自适应
  8. 关于Sublime Text编辑器的实用技巧
  9. python中输出内容颜色得控制
  10. org.apache.catalina.LifecycleException: Failed to start component
  11. SSM+Maven+MySQL实现简易的挂机修仙页游
  12. (转)Spring Boot(四):Thymeleaf 使用详解
  13. A - Points and Segments CodeForces - 429E
  14. Java关键字synchronized详解
  15. MAC系统压缩文件传到WINDOWS下出现乱码
  16. 【Java并发编程五】信号量
  17. numpy基本方法
  18. Makefile 选项 CFLAGS 、LDFLAGS 、LIBS
  19. SQL Server&rsquo;s Storage Top 10 Best Practices
  20. 全局CSS的配置

热门文章

  1. 【项目记录】3:pyinstaller打包之后tkcalendar无法使用的解决办法
  2. Mysql explain 每个属性含义
  3. WebService基本功能接口实现
  4. FII-PRA006/010开发板硬件实验一
  5. 12.15linux学习第十八天
  6. 复制文件到U盘提示“一个意外错误使您无法复制该文件”处理办法
  7. LeetCode刷题4:寻找两个正序数组的中位数
  8. .Net Core 前后端分离 DevOps 系列
  9. 简单的helloworld指令
  10. jquery中,某些写法后来更新导致版本不支持的替代方法