例如,我有一个业务对象Person
:
class Person : INotifyPropertyChanged
{
string Name { get; set; }
DateTime DateOfBirth { get; set; }
}
// ^ abbreviated for better legibility; implementation would be trivial
而且我有一些 Winforms UI 控件数据绑定到此类的对象:
Person somePerson = ...;
nameTextBox.DataBindings.Add("Text", somePerson, "Name");
dobDatePicker.DataBindings.Add("Value", somePerson, "DateOfBirth");
现在我正在进行更改,somePerson
并且由于已经INotifyPropertyChanged
实施,这些更改会反映在 UI 中。到现在为止还挺好。
现在我的问题:如果我在工作线程中进行更改somePerson
(即不在 UI 线程中),例如因为我正在从数据库加载数据作为后台操作,这可能会导致异常,因为数据绑定尝试更新控件,仅允许在 UI 线程上发生。
这意味着我需要调用InvokeRequired
UI 元素来查看是否允许我更新业务对象——这似乎违反了应用程序的逻辑分层。
理想情况下,我希望能够修改我的业务对象,而不必关心它是否与 UI 数据绑定。这是否可以通过 Winforms 数据绑定实现?