You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WinForm中使用MVVM Toolkit?求使用示例

在WinForms中使用MVVM Toolkit的示例

1. 准备工作

  • 安装CommunityToolkit.Mvvm NuGet包,可通过NuGet包管理器或执行命令:
    Install-Package CommunityToolkit.Mvvm
    

2. 创建ViewModel

基于MVVM Toolkit特性实现业务逻辑与数据属性:

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System.Windows.Forms;

public partial class LoginViewModel : ObservableObject
{
    // 自动生成带PropertyChanged通知的Username属性
    [ObservableProperty]
    private string _username;

    [ObservableProperty]
    private string _password;

    [ObservableProperty]
    private bool _isLoginEnabled;

    public LoginViewModel()
    {
        // 监听属性变化,动态控制登录按钮状态
        PropertyChanged += (_, e) =>
        {
            IsLoginEnabled = !string.IsNullOrWhiteSpace(Username) && !string.IsNullOrWhiteSpace(Password);
        };
    }

    // 自动生成LoginCommand命令
    [RelayCommand]
    private void Login()
    {
        // 示例登录逻辑
        MessageBox.Show($"登录请求:用户名「{Username}」,密码「{Password}」");
    }
}

3. WinForm界面绑定ViewModel

在窗体代码中完成UI控件与ViewModel的绑定:

public partial class LoginForm : Form
{
    private readonly LoginViewModel _viewModel;

    public LoginForm()
    {
        InitializeComponent();
        _viewModel = new LoginViewModel();

        // 绑定输入框到ViewModel属性,实时同步数据
        txtUsername.DataBindings.Add(nameof(txtUsername.Text), _viewModel, nameof(_viewModel.Username), false, DataSourceUpdateMode.OnPropertyChanged);
        txtPassword.DataBindings.Add(nameof(txtPassword.Text), _viewModel, nameof(_viewModel.Password), false, DataSourceUpdateMode.OnPropertyChanged);
        
        // 绑定按钮可用状态到ViewModel属性
        btnLogin.DataBindings.Add(nameof(btnLogin.Enabled), _viewModel, nameof(_viewModel.IsLoginEnabled));
        
        // 绑定按钮点击事件到ViewModel命令
        btnLogin.Click += (_, __) => _viewModel.LoginCommand.Execute(null);
    }
}

关键特性说明

  • ObservableProperty:自动生成包含PropertyChanged通知的属性,无需手动实现INotifyPropertyChanged。
  • RelayCommand:简化命令创建,无需手动实现ICommand接口,直接绑定到UI交互事件。
  • 数据绑定:让UI控件与ViewModel属性自动同步,减少手动更新UI的代码。

内容的提问来源于stack exchange,提问作者sigeer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 21:37:20