C# Winform 实现静态变量属性的值变了,触发事件,类似WPF的双向绑定

在C# WinForms中,虽然没有像WPF那样内置的双向绑定机制,但你可以通过事件和属性封装来实现类似的功能。具体来说,你可以在静态属性的set访问器中触发一个自定义事件,然后在需要的地方订阅这个事件,以便在属性值发生变化时执行相应的操作。

以下是一个简单的示例,展示了如何实现这一功能:

using System;
using System.Windows.Forms;
public static class MyStaticClass
{
 // 定义事件
 public static event EventHandler<EventArgs> MyPropertyChanged;
 private static string _myProperty;
 public static string MyProperty
 {
 get { return _myProperty; }
 set
 {
 if (_myProperty != value)
 {
 _myProperty = value;
 // 触发事件
 OnMyPropertyChanged();
 }
 }
 }
 // 触发事件的方法
 private static void OnMyPropertyChanged()
 {
 MyPropertyChanged?.Invoke(null, EventArgs.Empty);
 }
}
public class MyForm : Form
{
 private Label myLabel;
 public MyForm()
 {
 myLabel = new Label();
 myLabel.Text = "Initial Value";
 myLabel.Location = new System.Drawing.Point(10, 10);
 this.Controls.Add(myLabel);
 // 订阅事件
 MyStaticClass.MyPropertyChanged += MyStaticClass_MyPropertyChanged;
 }
 // 事件处理程序
 private void MyStaticClass_MyPropertyChanged(object sender, EventArgs e)
 {
 // 当属性值变化时,更新Label的文本
 myLabel.Text = MyStaticClass.MyProperty;
 }
 [STAThread]
 public static void Main()
 {
 Application.EnableVisualStyles();
 Application.Run(new MyForm());
 }
}

使用示例:
你可以在其他地方修改 MyStaticClass.MyProperty 的值,例如:

MyStaticClass.MyProperty = "New Value";

注意事项:

  • 由于 MyProperty 是静态的,它的值在整个应用程序生命周期内是共享的。
  • 如果你需要在多个窗体或控件之间共享状态,这种方法是有效的。

通过这种方式,你可以在WinForms中实现类似WPF的双向绑定效果。

作者:VipSoft原文地址:https://www.cnblogs.com/vipsoft/p/18702001

%s 个评论

要回复文章请先登录注册