CommunityToolkit.Mvvm笔记---RelayCommand

news2024/11/25 5:48:21

RelayCommand 和 RelayCommand<T> 是 ICommand 实现,这些实现可向视图公开方法或委托。 这些类型充当在 viewmodel 和 UI 元素之间绑定命令的方法。

平台API:RelayCommand、RelayCommand<T>、IRelayCommand、IRelayCommand<T>

工作原理

RelayCommand 和 RelayCommand<T> 具有以下主要功能:

  • 它们提供 ICommand 接口的基本实现。
  • 它们还实现 IRelayCommand(和 IRelayCommand<T>)接口,该接口公开 NotifyCanExecuteChanged 方法以引发 CanExecuteChanged 事件。
  • 它们公开采用委托(如 Action 和 Func<T>)的构造函数,从而允许包装标准方法和 Lambda 表达式。
应用示例(RelayCommand)

步骤1:xaml视图,创建按钮触发命令

<Button Width="150" Height="30" Margin="0 30 0 0" Command="{Binding IncrementCounterCommand}">click</Button>
<TextBlock Width="150" Height="30" Text="{Binding Counter}"></TextBlock>

步骤2:创建ViewModel 

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;

public class MainViewModel : ObservableObject
{
    [ObservableProperty]
    private int _counter;
    public ICommand IncrementCounterCommand { get; }
    private void IncrementCounter() => Counter++;

    public MainViewModel()
    {
        // 创建一个 RelayCommand 并指定其要执行的方法
         IncrementCounterCommand = new RelayCommand(IncrementCounter);
    }

   
}

 结果如下图:点击按钮,textblock数据会一直增加

应用示例(RelayCommand<T>)

CommunityToolkit.Mvvm 中的 RelayCommand<T> 用来来处理带参数的命令。这种命令常用于需要传递参数从视图到视图模型的场景。例如,您可能需要根据用户的选择从列表中删除一个项目,或者您需要传递一个特定的数据项来进行处理。

步骤1:xaml视图

设置界面并将命令绑定到某个控件,例如按钮,同时使用参数。

<TextBlock  Width="150" Height="30" Text="{Binding Message}" FontSize="16" />
<TextBox  Width="150" Height="30"  Margin="5" Text="{Binding InputValue}"/>
<Button  Width="150" Height="30" Content="Update Message"
    Command="{Binding UpdateMessageCommand}"
    CommandParameter="{Binding InputValue}"
    Margin="5"/>

在这个布局中,我们有一个文本框供用户输入消息,和一个按钮,按钮点击时将文本框中的文本作为参数传递给 UpdateMessageCommand。 

步骤2:创建ViewModel

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;

public class MainViewModel : ObservableObject
{
    public RelayCommand<string> UpdateMessageCommand { get; }

    private string _message;
    public string Message
    {
        get => _message;
        set => SetProperty(ref _message, value);
    }
    [ObservableProperty]
    private string _inputValue;//输入框参数

    public MainViewModel()
    {
        UpdateMessageCommand = new RelayCommand<string>(UpdateMessage);
    }

    private void UpdateMessage(string newMessage)
    {
        Message = newMessage;
    }
}

运行结果如下:

 IRelayCommand 与RelayCommand 有什么区别

CommunityToolkit.Mvvm 库中,IRelayCommandRelayCommand 分别代表了接口和类的实现,它们是用来处理 MVVM(Model-View-ViewModel)模式中视图和视图模型之间的命令交互的。

用途:在许多情况下,IRelayCommand 用于声明依赖项注入(DI)或接口编程,允许开发者在测试时更容易地替换实现或模拟行为。RelayCommand 则用于实际的命令逻辑实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1617697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA组合逻辑电路设计之译码器

在数字电路中可以根据电路功能的不同分为&#xff0c;组合逻辑电路与时序逻辑电路。组合逻辑 电路在逻辑功能上的特点是任意时刻的输出仅仅取决于该时刻的输入&#xff0c;与电路原来的状态无 关。而时序逻辑从电路特征上看来&#xff0c;其特点为任意时刻的输出不仅取决于该…

电子邮箱是什么?电子邮箱怎么申请注册?

虽然通过电子邮箱收发邮件办公已经成为常态&#xff0c;但是很多人不清楚电子邮箱是什么&#xff1f;电子邮箱是指通过网络传递的“邮局”&#xff0c;可以用来收发电子邮件。每个人的电子邮箱地址都是唯一的&#xff0c;确保他人的邮件能准确送到我们的电子邮箱之中。电子邮箱…

字符长、看不懂、费率飙升|Runes协议上线后发生了什么?

作者&#xff1a;比特里里 X/推&#xff1a;lilyanna_btc 1、字符数长了&#xff0c;单词都完整了&#xff0c;反而看不懂了 由于 Runes 协议的字符长度限制&#xff0c;大部分的票都在 13 个字符及以上&#xff0c;人名、域名、slogan&#xff0c;各类玩法都出来了。很多人适…

Github Actions实现CI/CD(golang项目)

Github Actions构建CI/CD&#xff08;golang项目&#xff09; 1 基础概念 1.1 Actions GitHub Actions允许构建一个完整的 CI/CD Pipeline&#xff0c;与 GitHub 生态系统深度集成&#xff0c;而无需使用 Travis CI 或者 Circle CI 等第三方服务&#xff0c;对于开源项目都是…

MongoDB数据恢复—拷贝MongoDB数据库文件后无法启动服务的数据恢复案例

服务器数据恢复环境&#xff1a; 一台Windows Server操作系统服务器&#xff0c;服务器上部署MongoDB数据库。 MongoDB数据库故障&检测&#xff1a; 工作人员在未关闭MongoDB数据库服务的情况下&#xff0c;将数据库文件拷贝到其他分区。拷贝完成后将原MongoDB数据库所在分…

AI人工智能培训老师叶梓:大数据治理的关键工具:开源数据血缘分析系统

在大数据时代&#xff0c;数据的产生和传播速度日益加快&#xff0c;数据之间的关系也变得日益复杂。为了更好地管理和理解数据之间的关系&#xff0c;数据血缘分析系统应运而生。本文将介绍几个开源的数据血缘分析系统&#xff0c;它们在数据治理、数据质量管理和数据隐私保护…

Python学习从0开始——项目一day02数据库连接

Python学习从0开始——项目一day02数据库连接 一、在线云数据库二、测试数据库连接三、数据库驱动介绍四、SQL执行4.1插入测试数据4.2安装数据库连接模块4.3测试SQL语句执行4.4执行SQL的固定步骤及示例 一、在线云数据库 找了一个在线数据库&#xff0c;需要邮箱注册&#xff…

jetcache fastjson 泛型复杂对象JSON序列 ,反序列化

Jetcache fastjson 泛型复杂对象JSON序列 ,反序列化 默认的FastJson2 序列化存在问题增强FastJson 支持Encode 编码器Decode 解码器 默认的FastJson2 序列化存在问题 默认的序列化不能转换List 中的泛型数据类型, 从缓存拿取的list集合对象数据全部都转换成了JSONObject 增强F…

基于 Win32 编程,使用 C语言开发一个记事本。

现在 Win32 非常少见&#xff0c;因为太原始了&#xff0c;同时也因为高级语言做应用开发速度更快。但是用 C 语言开发一个 win32 记事本对于理解应用程序运行的内部原理还是很有帮助的&#xff0c;“最基础的就是最有用的”&#xff0c;Windows 编程圣经 《Windows 程序设计》…

开发区块链DApp应用,引领数字经济新潮流

随着区块链技术的飞速发展&#xff0c;分布式应用&#xff08;DApp&#xff09;正成为数字经济中的一股强劲力量。DApp以其去中心化、透明公正的特点&#xff0c;为用户带来了全新的数字体验&#xff0c;开创了数字经济的新潮流。作为一家专业的区块链DApp应用开发公司&#xf…

【Elasticsearch】Elasticsearch 从入门到精通(二):基础使用

《Elasticsearch 从入门到精通》共包含以下 2 2 2 篇文章&#xff1a; Elasticsearch 从入门到精通&#xff08;一&#xff09;&#xff1a;基本介绍Elasticsearch 从入门到精通&#xff08;二&#xff09;&#xff1a;基础使用 &#x1f60a; 如果您觉得这篇文章有用 ✔️ 的…

使用写入这类接口后,文件指针fp是否会偏移?

以fprintf为例&#xff1a; 在使用 fprintf 函数写入数据时&#xff0c;文件指针 fp 会自动进行偏移&#xff0c;以确保数据被写入到文件的正确位置。 每次调用 fprintf 函数都会将数据写入文件&#xff0c;并且文件指针会在写入完成后自动移动到写入的末尾&#xff0c;以便下…

MYSQL中ID是无序的,但是需要通过指定的条件查询到最大的值的ID应该如何查询。

1、开发中遇到这个问题&#xff0c;下面直接通过mysql的方式讲解 select id, start_time, eva_id from a where eva_id 1 order by start_time desc 执行查询出来的数据是这样的 2、解决方案 那么问题来了&#xff0c; 我只想获取到start_time 最大的那个ID&#xff0c;那有些…

CRMEB pro版/多门店商城系统客服配置教程

客服功能配置介绍 功能提示&#xff1a; Pro v2.0系统采用swoole框架&#xff0c;客服不需要单独配置&#xff0c;按照正常安装流程配置好程序即可使用&#xff01; 如出现客服无法使用&#xff0c;请检查&#xff1a; 1.消息队列是否正常 2.重启swoole 一、功能介绍 CRMEB商城…

【UML建模】用例图

1 参与者 参与者的概念&#xff1a; 指系统以外的、需要使用系统或与系统交互的外部实体 可以分为&#xff1a;人、外部设备、外部系统 参与者的图形符号&#xff1a; 例 3.1 在一个银行业务系统中&#xff0c;可能会有以下参与者 客户 &#xff1a;在银行业务系统中办理…

图像处理技术与应用(一)

图像处理技术与应用入门 使用skimage进行图像读取和显示 skimage库&#xff08;Scikit-image&#xff09;提供了一个强大的工具集&#xff0c;用于执行各种图像处理任务。以下是如何使用skimage读取和显示图像的基本示例&#xff1a; from skimage import ioimg io.imread(…

华为sr-mpls policy配置案例

SR&#xff0d;MPLS POLICY在ensp上面做不了&#xff0c;这是官方上的配置

金铲铲无限金币-罗小黑最新

罗小黑最新&#xff0c;下载自测。 记得查看注意事项。 获取链接&#xff1a;https://pan.baidu.com/s/1mRuQPAqWXv6oeihQ5fsn0w?pwdd0s3 提取码&#xff1a;d0s3 --来自百度网盘超级会员V1的分享

Apache Answer 开源问答社区安装体验

Answer 是由 SegmentFault 思否团队打造的一款问答平台软件,后端使用 Go 语言编写,于2022年10月24日(程序员节)正式开源。你可以免费使用 Answer 高效地搭建一个问答社区,并用于产品技术问答、客户支持、用户交流等场景。 2023年10月9日,Answer 顺利通过投票,以全票通过…

spring的跨域问题

跨域问题 什么是跨域解决跨域 什么是跨域 跨域问题本质是浏览器的一种保护机制&#xff0c;它的初衷是为了保证用户的安全&#xff0c;防止恶意网站窃取数据。如果出现了以下情况中的任意一种&#xff0c;那么它就是跨域请求&#xff1a; 1、协议不同&#xff0c;如 http 和 h…