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