![](/img/trans.png)
[英]Databinding with Control Properties in Winforms: Bind Enabled to state of Combobox?
[英]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.