编辑
2025-11-25
C#
00

目录

主要特点:
Nuget 安装包
ViewModelt管理
3. 命令执行控制:WinForm 实践示例
结论

IRelayCommand 是 CommunityToolkit.Mvvm 库中的核心接口,用于定义命令的基本行为和状态管理。它继承自 ICommand 接口,并提供了更丰富的功能和更好的类型支持。

主要特点:

  • 支持命令执行
  • 提供命令可执行状态管理
  • 类型安全
  • 支持泛型参数

Nuget 安装包

image.png

ViewModelt管理

C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; namespace App07 { // 视图模型类 public partial class MainViewModel : ObservableObject { // 私有字段:计数器 private int _clickCount; // 公共属性:点击计数 public int ClickCount { get => _clickCount; set => SetProperty(ref _clickCount, value); } // 定义中文注释的命令 /// <summary> /// 增加计数的命令 /// </summary> public IRelayCommand IncrementCommand { get; } /// <summary> /// 重置计数的命令 /// </summary> public IRelayCommand ResetCommand { get; } // 构造函数 public MainViewModel() { // 创建增加计数的命令,并指定执行和可执行逻辑 IncrementCommand = new RelayCommand( execute: () => ClickCount++, // 执行逻辑 canExecute: () => ClickCount < 10 // 可执行条件 ); // 创建重置计数的命令 ResetCommand = new RelayCommand( execute: () => ClickCount = 0, // 执行逻辑 canExecute: () => ClickCount > 0 // 可执行条件 ); } } }

3. 命令执行控制:WinForm 实践示例

下面是一个完整的 WinForm 示例,展示了 IRelayCommand 的使用:

C#
namespace App07 { public partial class Form1 : Form { private readonly MainViewModel _viewModel; public Form1() { InitializeComponent(); // 初始化视图模型 _viewModel = new MainViewModel(); // 绑定数据和命令 BindViewModel(); } private void BindViewModel() { // 绑定点击计数标签 lblClickCount.DataBindings.Add( "Text", _viewModel, nameof(_viewModel.ClickCount), true, DataSourceUpdateMode.OnPropertyChanged ); // 绑定命令 btnIncrement.Click += (s, e) => _viewModel.IncrementCommand.Execute(null); btnReset.Click += (s, e) => _viewModel.ResetCommand.Execute(null); // 更新命令可执行状态 _viewModel.PropertyChanged += (s, e) => { btnIncrement.Enabled = _viewModel.IncrementCommand.CanExecute(null); btnReset.Enabled = _viewModel.ResetCommand.CanExecute(null); }; } } }

image.png

结论

IRelayCommand 是现代 .NET 应用程序中实现命令模式的强大工具,它简化了命令创建和管理,提高了代码的可读性和可维护性。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!