Data binding 如何避免数据绑定中的大量通知
我想这是数据绑定场景中很常见的问题。 如果您正在运行批处理更新,并且希望避免每次更新都执行propertychanged依赖的计算/操作/任何操作,您通常会怎么做 我通常想到的第一件事是,要么引入一个新的布尔值,要么取消对eventhandler的hook/hook 我不喜欢这种方法的原因是:Data binding 如何避免数据绑定中的大量通知,data-binding,batch-updates,Data Binding,Batch Updates,我想这是数据绑定场景中很常见的问题。 如果您正在运行批处理更新,并且希望避免每次更新都执行propertychanged依赖的计算/操作/任何操作,您通常会怎么做 我通常想到的第一件事是,要么引入一个新的布尔值,要么取消对eventhandler的hook/hook 我不喜欢这种方法的原因是: 它们引入了新的复杂性(必须保持…) 它们很容易出错,因为您必须确保随后发送禁止的通知 我想知道是否有人已经用一种更方便、更容易处理的方式解决了这个问题 短暂性脑缺血发作 马丁 编辑:不要误解我。我知道
- 它们引入了新的复杂性(必须保持…)
- 它们很容易出错,因为您必须确保随后发送禁止的通知
也许我走错了方向,但我想我在这里尝试一下…什么平台?这篇帖子让我想到了.NET 底层对象是什么?例如,
BindingList
作为源允许您在执行更新时通过将RaiseListChangedEvents
设置为false来禁用通知
除此之外(或类似);是的,在大更新期间断开绑定不幸的是,没有一个一刀切的解决方案。我已经应用或看到了以下解决方案:
BindingSource
组件进行数据绑定。不要将控件绑定到特定对象(或IList),而是将该对象用作BindingSource
的DataSource
,然后将控件绑定到BindingSource
BindingSource
类具有SuspendBinding()
和ResumeBinding()
函数。是的,我说的是.NET,它与底层对象无关,因为我使用RaiseListChangedEvents或者我自己实现类似的东西。但我不确定这两种方法是否都是解决此问题的最佳“可用”方法…这只会帮助避免不必要的UI更新,但是它不会阻止ViewModels中代码的执行,特别是当它们是主细节并且主细节侦听来自细节的事件时。在这种情况下,唯一真正的方法必须是首先防止对象引发事件。不可能有一个通用的解决方案。