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

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 // 可执行条件
);
}
}
}
下面是一个完整的 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);
};
}
}
}

IRelayCommand 是现代 .NET 应用程序中实现命令模式的强大工具,它简化了命令创建和管理,提高了代码的可读性和可维护性。
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!