簡體   English   中英

是否可以將動態屬性綁定到 WinForms 控件屬性?

[英]Is it possible to bind dynamic properties to WinForms control properties?

我想將動態屬性綁定到 WinForms 控件屬性。

在以下示例中,我將線程的 IsAlive 屬性綁定到按鈕的 Enabled。

using System;
using System.Windows.Forms;
using System.Threading;

namespace ThreadTest
{
  public partial class Form1 : Form
  {
    Thread thread;

    public Form1()
    {
      InitializeComponent();

      thread = new Thread(() =>
        {
          while (true)
            Thread.Sleep(125);
        }
      );

      button2.DataBindings.Add("Enabled", thread, "IsAlive");
    }

    private void buttonStart_Click(object sender, EventArgs e)
    {
      thread.Start();
    }

    private void buttonStop_Click(object sender, EventArgs e)
    {
      // ...
    }
  }
}

這僅適用於啟動。 “停止”按鈕被禁用,因為線程不活動。 當我單擊“開始”按鈕時,我希望將“停止”按鈕更改為啟用。 但事實並非如此。

我錯過了什么還是這不可能?

Thread沒有實現INotifyPropertyChanged ,也沒有“IsAliveChanged”事件,因此數據綁定無法識別IsAlive是否已更改。

此博客條目有一些提示和技巧,使數據綁定在WinForms中工作。 主要要求是,如果要支持從數據源到控件的動態更新,則必須將要綁定的類設計為具有數據綁定。

WinForms中的數據綁定相當破碎,因為它們只能以一種方式自動運行(當您更改UI時,對象會更新)。 如果您擁有用於綁定的對象,則應在其上實現INotifyPropertyChanged接口。 在你的情況下,你必須手動重置綁定,使其工作(所以綁定不會給你任何東西)

調用 DataBindings 損壞是不對的。 破碎的意思是,有些東西不像設計的那樣工作 - 但從源頭來看,它完全按照設計的方式工作。 使用 Fody 的 ProperyChanged weaver 等工具,您幾乎可以使用 INotifyPropertyChanged 創建每個類

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM