我想这是一个相当普遍的问题,在数据绑定的情况。什么你通常做的,如果你正在运行一个批次更新,并希望避免这一引发-基算/行为/不管是执行为每一个更新?

第一件事,这通常涉及到我的脑海里,是要么引入了一个新的布尔或者脱钩/钩的处理,...

什么我不喜欢这个方法是:

  • 他们介绍新的复杂性(具有可以维持,...)
  • 他们是容易出错,因为你必须确保一个抑制发送通知之后

我想知道如果有人能解决这个问题已经在更多的方便,更容易处理的?

tia 马丁

编辑:不要missunderstand我。我知道的事情。净提供像RaiseListChangedEvents从BindingList,...他们都是解决这一问题更加/减少的同样的方式,因为我所描述的,但是我在寻找一个不同的方式并没有列出的缺点。也许是我在错误的轨道,但我虽然我试试看这里...

有帮助吗?

解决方案

没有一个单一尺寸适合所有解决方案,不幸的。我已经应用或者见过以下方案:

  1. 有两个网.一个信号发射时的改变来自用户的行动,其他总是发火灾。这就允许的区分变化的用户界面和更新的代码。

  2. 布尔,以保护代码

  3. 酒店的事件框架,停止传播活动时自动的价值并没有真正改变。

  4. 冻结/解冻方法上的信号或信号经理(即整个框架)

  5. 一种方法合并信号转换成一个单一的。你可以做N更新,他们得到收集到M号在哪里米 <=N。如果你改变的相同财产的100倍,你仍然只得到1个信号。

  6. 排队的信号(而不是同步执行)。排队代码然后可以合并信号。我用这个巨大的成功应用程序中,没有一个"保存"。所有的改变都保存在数据库作为你让他们。当你修改的文本,更改都合并在一定时间(即直到先前的DB更新返回)和然后,他们承诺作为一个单一的改变。

  7. API设定几个值在一次;只有一个单一的信号发射。

  8. 信号框架可以发送信号在不同级别的粒度。说你有一个人与一个名称。当你改名字,你会得到两个信号:一个名称的变化和一个"实例的领域改变"。所以如果你只在乎"有些东西改变",然后你可以挂钩的实例,而不是所有领域。

其他提示

什么样的平台?后让我想想。网。

什么是潜在的对象?例如, BindingList<T> 作为一个来源,可以禁用通知,通过设置 RaiseListChangedEvents 假而做的更新。

其他(或类似);是的,切断约束力过大的更新

最简单的途径是使用 BindingSource 分数据结合。而不是结合你控制到特定对象(或IList),使用对象为 DataSourceBindingSource, 然后绑定的控制 BindingSource.

BindingSourceSuspendBinding()ResumeBinding() 功能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top