如何在WinForm中使用MVVM Toolkit?求使用示例
在WinForms中使用MVVM Toolkit的示例
1. 准备工作
- 安装
CommunityToolkit.MvvmNuGet包,可通过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
相关产品推荐
相关产品推荐

