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

科技资讯 投稿 6300 0 评论

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

本系列文章导航
    https://www.cnblogs.com/aierong/category/2297596.html
  1. https://github.com/aierong/WpfDemo (自我Demo地址

 

0.说明

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

 

1.模型定义

 

2.viewmodel代码实现

几个关键点:

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.异步命令

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}}" />

 

编程笔记 » CommunityToolkit.Mvvm8.1 viewmodel使用-旧式写法(2)

赞同 (28) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽