我目前正在开发一个 WinForms 应用程序,我正在使用 BindingSource 为我的复杂对象提供干净的、GUI 管理的数据绑定。出于这个问题的目的,可以忽略此 ViewModel 对象上的项目列表,我们可以专注于我至少有 50 个绑定的属性这一事实。
我在一个属性的 get 访问器上放置了一个断点,发现每次更新引发 PropertyChanged 事件的属性时都会触发它。根据我的研究,这似乎是因为 CurrencyManager 正在刷新整个当前“行”以进行显示,因为一个属性发生了变化。(我可能错了。)我创建了一个解决方案,但我很想知道是否有其他人遇到过这个问题,也许可以告诉我一个更清洁的解决方案。见下面我的:
public void StartProgress()
{
Enabled = false;
pbBusyIndicator.Visible = true;
btnClearForm.Enabled = false;
btnSaveCarrier.Enabled = false;
carrierViewModelBindingSource.RaiseListChangedEvents = false;
carrierViewModelBindingSource.SuspendBinding();
}
public void StopProgress()
{
Enabled = true;
pbBusyIndicator.Visible = false;
btnClearForm.Enabled = true;
carrierViewModelBindingSource.ResumeBinding();
carrierViewModelBindingSource.CurrencyManager.Refresh();
carrierViewModelBindingSource.RaiseListChangedEvents = true;
}
如上所述,数据源绑定到单个对象。我不得不再次将 RaiseListChangedEvents 设置为 true,因为关闭时双向数据绑定不起作用:(。
提前感谢您的任何帮助!