编辑
2025-09-19
C#
00

目录

步骤 1:创建项目并安装必要的 NuGet 包
步骤 2:定义消息
步骤 3:创建发送消息的视图模型
步骤 4:设计主窗体界面
步骤 5:在主窗体中使用视图模型
步骤 6:创建接收消息的窗体
步骤 7:在接收窗体中注册并处理消息
步骤 8:在主窗体中打开接收窗体
结论

本示例演示了在一个简单的 WinForms 应用程序中,如何使用 CommunityToolkit.Mvvm 的消息机制来实现视图和视图模型之间的通信。这个示例应用程序包含两个窗体:一个主窗体用于发送消息,另一个窗体用于接收并显示消息内容。

步骤 1:创建项目并安装必要的 NuGet 包

  1. 创建一个新的 WinForms 应用程序。
  2. 通过 NuGet 包管理器安装 CommunityToolkit.Mvvm 包。

步骤 2:定义消息

创建一个名为 User.cs 的用户类。

C#
public class User { public string Name { get; set; } public int Age { get; set; } public User(string name, int age) { Name = name; Age = age; } }

创建一个名为 UserMessage.cs 的新类文件,并定义一个消息类来传递用户的消息。

C#
public class UserMessage : ValueChangedMessage<User> { public UserMessage(User value) : base(value) { } }

步骤 3:创建发送消息的视图模型

创建一个名为 MainViewModel.cs 的新类文件,这个视图模型负责发送消息。

C#
public partial class MainViewModel : ObservableObject { [ObservableProperty] private string userName; [ObservableProperty] private int userAge; [RelayCommand] private void SendMessage() { var user = new User(UserName, UserAge); WeakReferenceMessenger.Default.Send(new UserMessage(user)); } }

步骤 4:设计主窗体界面

在主窗体(Form1)中,添加一个文本框(textBoxUserInput)供用户输入消息,以及一个按钮(buttonSend)用于发送消息。

步骤 5:在主窗体中使用视图模型

修改主窗体的代码,使其使用 MainViewModel 并绑定 UI 元素。

C#
public partial class Form1 : Form { private MainViewModel _viewModel; public Form1() { InitializeComponent(); _viewModel = new MainViewModel(); // 设置数据绑定 txtName.DataBindings.Add("Text", _viewModel, nameof(_viewModel.UserName), false, DataSourceUpdateMode.OnPropertyChanged); txtAge.DataBindings.Add("Text", _viewModel, nameof(_viewModel.UserAge), false, DataSourceUpdateMode.OnPropertyChanged); // 绑定发送按钮的点击事件 btnSubmit.Click += (s, e) => _viewModel.SendMessageCommand.Execute(null); } }

image.png

步骤 6:创建接收消息的窗体

创建第二个窗体(ReceiverForm),并在其中添加一个标签(labelMessage)用于显示接收到的消息。

image.png

步骤 7:在接收窗体中注册并处理消息

修改 Form2 的代码,注册并处理 UserMessage

C#
public Form2() { InitializeComponent(); WeakReferenceMessenger.Default.Register<UserMessage>(this, (r, m) => { // 确保操作在 UI 线程上执行 this.Invoke(new Action(() => { labelMessage.Text = $"Received user: {m.Value.Name}, Age: {m.Value.Age}"; })); }); }

步骤 8:在主窗体中打开接收窗体

最后,修改主窗体的代码,在其中添加一个方法来打开 ReceiverForm

C#
private void btnSubmit_Click(object sender, EventArgs e) { Form2 form2 = new Form2(); form2.Show(); }

不要忘记在主窗体的设计器中添加一个按钮,并为其 Click 事件绑定此方法。

image.png

结论

通过上述步骤,我们创建了一个简单的 WinForms 应用程序,演示了如何使用 CommunityToolkit.Mvvm 的消息机制在视图和视图模型之间进行通信。这个示例展示了如何发送和接收消息,以及如何在 WinForms 应用程序中实现松散耦合的组件交互。这种通信方式非常适合复杂的应用程序架构,可以有效地提高代码的可维护性和扩展性。

本文作者:技术老小子

本文链接:

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