我想将动态属性绑定到WinForms控件属性。
在下面的示例中,我将线程的IsAlive属性绑定到Enabled of a button。
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)
{
// ...
}
}
}
这仅适用于启动。 “停止”按钮被禁用,因为线程不活动。当我点击“开始”按钮时,我希望将按钮“停止”更改为启用。但事实并非如此。
我错过了什么或者这是不可能的吗?
答案 0 :(得分:3)
线程没有实现INotifyPropertyChanged,也没有“IsAliveChanged”事件,因此数据绑定无法识别IsAlive是否已更改。
This blog entry有一些提示和技巧可以使数据绑定在WinForms中运行。主要要求是,如果要支持从数据源到控件的动态更新,那么绑定到的类必须考虑数据绑定。
答案 1 :(得分:1)
WinForms中的数据绑定相当破碎,因为它们只能以一种方式自动运行(当您更改UI时,对象会更新)。如果您拥有用于绑定的对象,则应在其上实现INotifyPropertyChanged接口。在你的情况下,你必须手动重置绑定,使其工作(所以绑定不会给你任何东西)