顾乔芝士网

持续更新的前后端开发技术栈

WinForm中的MVVM模式编程

很多对比WinForm和WPF的文章总会拿MVVM模式编程来说事。什么WPF搭配MVVM框架编程多么多么爽。其实WinForm也可以实现MVVM模式编程,只不过工控上位机使用MVVM模式对于效率提升不是那么显著,所以我一般也不用。

WinForm实现MVVM模式编程可以使用CommunityToolkit或者ReactiveUI框架都行。以使用CommunityToolkit框架为例,先通过NuGet安装CommunityToolkit.Mvvm包。

创建一个类,命名为MainViewModel,输入下面代码。

namespace MVVMExample
{
    publicclassMainViewModel : ObservableObject
    {
        privateint_data;
        publicintData
        {
            get => _data;
            set => SetProperty(ref _data, value);
        }
        publicRelayCommand DataAddCommand { get; }
        publicMainViewModel()
        {
            DataAddCommand = newRelayCommand(ExecuteAddItemCommand);
        }
        privatevoidExecuteAddItemCommand()
        {
            Data++;
        }
    }
}

再将自动创建的Form1重命名为MainView。窗体分别添加两个TextBox和一个Button控件,布局如下。

窗体视图MainView添加代码如下。

publicpartialclassMainView : Form
{
    publicMainView(MainViewModel viewModel)
    {
        InitializeComponent();
        _viewModel = newMainViewModel();
        BindingConfig();
          
    }
    privatereadonlyMainViewModel _viewModel;
    privatevoidMainView_Load(objectsender, EventArgs e)
    {
    }
    privatevoidBindingConfig()
    {
        // 绑定属性
        textBox1.DataBindings.Add(nameof(textBox1.Text), _viewModel, nameof(_viewModel.Data));
        textBox2.DataBindings.Add(nameof(textBox2.Text), _viewModel, nameof(_viewModel.Data));
        // 绑定命令
        button1.Click += (s, e) => _viewModel.DataAddCommand.Execute(null);
    }
}

上面代码中,窗体视图MainView中的两个TextBox控件的Text属性都绑定到了MainViewModel中的Data.运行程序就可以看到当点击按钮时两个TextBox控件数据跟着同时刷新。当修改任意一个TextBox控件中的数据时,比如修改到100,那么再次点击按钮时,数据从100开始递增。

以上是MVVM模式编程在WinForm上比较简单的实现,我们也可以结合
Microsoft.Extensions.DependencyInjection实现更加复杂的功能。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言