如何避免大规模的通知中的数据绑定的
-
19-09-2019 - |
题
我想这是一个相当普遍的问题,在数据绑定的情况。什么你通常做的,如果你正在运行一个批次更新,并希望避免这一引发-基算/行为/不管是执行为每一个更新?
第一件事,这通常涉及到我的脑海里,是要么引入了一个新的布尔或者脱钩/钩的处理,...
什么我不喜欢这个方法是:
- 他们介绍新的复杂性(具有可以维持,...)
- 他们是容易出错,因为你必须确保一个抑制发送通知之后
我想知道如果有人能解决这个问题已经在更多的方便,更容易处理的?
tia 马丁
编辑:不要missunderstand我。我知道的事情。净提供像RaiseListChangedEvents从BindingList,...他们都是解决这一问题更加/减少的同样的方式,因为我所描述的,但是我在寻找一个不同的方式并没有列出的缺点。也许是我在错误的轨道,但我虽然我试试看这里...
解决方案
没有一个单一尺寸适合所有解决方案,不幸的。我已经应用或者见过以下方案:
有两个网.一个信号发射时的改变来自用户的行动,其他总是发火灾。这就允许的区分变化的用户界面和更新的代码。
布尔,以保护代码
酒店的事件框架,停止传播活动时自动的价值并没有真正改变。
冻结/解冻方法上的信号或信号经理(即整个框架)
一种方法合并信号转换成一个单一的。你可以做N更新,他们得到收集到M号在哪里米 <=N。如果你改变的相同财产的100倍,你仍然只得到1个信号。
排队的信号(而不是同步执行)。排队代码然后可以合并信号。我用这个巨大的成功应用程序中,没有一个"保存"。所有的改变都保存在数据库作为你让他们。当你修改的文本,更改都合并在一定时间(即直到先前的DB更新返回)和然后,他们承诺作为一个单一的改变。
API设定几个值在一次;只有一个单一的信号发射。
信号框架可以发送信号在不同级别的粒度。说你有一个人与一个名称。当你改名字,你会得到两个信号:一个名称的变化和一个"实例的领域改变"。所以如果你只在乎"有些东西改变",然后你可以挂钩的实例,而不是所有领域。
其他提示
什么样的平台?后让我想想。网。
什么是潜在的对象?例如, BindingList<T>
作为一个来源,可以禁用通知,通过设置 RaiseListChangedEvents
假而做的更新。
其他(或类似);是的,切断约束力过大的更新
最简单的途径是使用 BindingSource
分数据结合。而不是结合你控制到特定对象(或IList),使用对象为 DataSource
的 BindingSource
, 然后绑定的控制 BindingSource
.
的 BindingSource
类 SuspendBinding()
和 ResumeBinding()
功能。