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

 

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

 

 

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

 

原文链接:https://www.cnblogs.com/aierong/p/17300025.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:CommunityToolkit.Mvvm8.1 viewmodel使用-旧式写法(2) - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • JavaScript基于activexobject连接远程数据库SQL Server 2014的方法

    下面是JavaScript基于ActiveXObject连接远程数据库SQL Server 2014的方法的完整攻略及两条示例说明。 1.前置条件 在使用ActiveXObject连接SQL Server之前,需要确保你已经配置了以下条件: 安装SQL Server 2014及以上版本 安装SQL Server驱动程序(SQL Server native c…

    C# 2023年6月8日
    00
  • 使用Aspose.Cells组件生成Excel文件实例

    下面就为您详细讲解使用 Aspose.Cells 组件生成 Excel 文件的攻略。 什么是Aspose.Cells组件 Aspose.Cells 是一个基于.NET的电子表格处理组件,可以让您处理 Excel 工作簿、工作表、图表和公式等内容。它支持XLS、XLSX、XLSM、XLSB、CSV、TSV、HTML、PDF和ODS等多种格式的文件。 安装Asp…

    C# 2023年5月31日
    00
  • 分享两种实现Winform程序的多语言支持的多种解决方案

    接下来我将详细讲解Winform程序实现多语言支持的多种解决方案。 1. 利用Resx文件实现多语言支持 Resx文件是.NET中专门用于多语言支持的文件格式,可以用来存储不同语言的文本信息,在程序中通过读取Resx文件来实现不同语言的界面显示。 1.1 创建Resx文件 创建Resx文件有多种方式,这里以Visual Studio为例。 在Visual S…

    C# 2023年6月7日
    00
  • 解决DropDownList总是选中第一项的方法

    要解决DropDownList总是选中第一项的问题,需要在HTML和JavaScript的代码中做出对应的改变。具体步骤如下: 原因分析 首先,我们需要明确这个问题的产生原因。DropDownList有一个默认属性selectedIndex,它的默认值是0,也就是默认会选中第一项。如果在后续操作中没有手动修改这个属性的值,那么依旧会选中第一项。因此,要解决这…

    C# 2023年6月1日
    00
  • asp.net+Ligerui实现grid导出Excel和Word的方法

    下面是“asp.net+Ligerui实现grid导出Excel和Word的方法”的完整攻略。 一、前置条件 在开始实现导出Excel和Word的方法前,需要确保已经安装了以下环境: Visual Studio以及.NET Framework Ligerui框架 二、实现导出Excel和Word的方法 1. 导出Excel 步骤一:添加NuGet包 在Vis…

    C# 2023年5月31日
    00
  • C#实现基于加减按钮形式控制系统音量及静音的方法

    下面我来详细讲解如何使用C#实现基于加减按钮形式控制系统音量及静音的方法。 准备工作 在开始编写代码之前,需要确保以下几点: 了解C#语言基础知识; 熟悉Windows API编程; 确认开发环境已经安装了以下库:System.Runtime.InteropServices和CoreAudioApi。 实现步骤 第一步:获取系统音量 使用CoreAudioA…

    C# 2023年6月7日
    00
  • C#动态绘制多条曲线的方法

    下面是详细讲解C#动态绘制多条曲线的方法的完整攻略。 标题 C#动态绘制多条曲线的方法 步骤 1. 准备工作 首先,我们需要在项目中添加Windows.Form控件和Chart控件。同时,需要引用System.Windows.Forms.DataVisualization库。 using System.Windows.Forms.DataVisualizat…

    C# 2023年6月1日
    00
  • java中的JSONP使用实例详解

    Java中的JSONP使用实例详解 JSONP(JSON with Padding)是一种跨域数据交互的技术,它允许在不同域之间进行数据交互。在Java中,可以使用JSONP来实现跨域数据交互。以下是JSONP的使用实例详解: 1. JSONP的基本原理 JSONP的基本原理是利用标签的跨域特性,将JSON数据作为参数传递给一个回调函数,然后在客户端中调用该…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部