要使 DataBindings 工作,您必须在包含您的 bool 值的类中实现INotifyPropertyChange 。如果您从 UI 线程以外的线程访问 myValue,则必须使用 SynchronizationContext 并在 UI 线程中初始化 myObject。
public class myObject : INotifyPropertyChanged
{
// The class has to be initialized from the UI thread
public SynchronizationContext context = SynchronizationContext.Current;
bool _myValue;
public bool myValue
{
get
{
return _myValue;
}
set
{
_myValue = value;
// if (PropertyChanged != null)
// PropertyChanged(this, new PropertyChangedEventArgs("myValue"));
if (PropertyChanged != null)
{
context.Send(
new SendOrPostCallback(o =>
PropertyChanged(this, new PropertyChangedEventArgs("myValue"))
), null);
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
然后,将您的 DataBinding 设置为:
checkBox1.DataBindings.Add("Checked", myObject.GlobalObject, "myValue");
第一个参数是要绑定的 UI 对象的属性。第二个属性是你的目标对象实例,第三个是需要绑定到第一个的目标对象的属性名。
我尽力使用每秒切换 myValue 的计时器来反映您的场景(相应地选中复选框)。这是我使用的表格的代码:
System.Timers.Timer x = new System.Timers.Timer();
myObject target;
public Form1()
{
InitializeComponent();
target = new myObject();
x.Elapsed += (s, e) =>
{
target.myValue = !target.myValue;
};
x.Interval = 1000;
checkBox1.DataBindings.Add("Checked", target, "myValue");
x.Start();
}