gpt4 book ai didi

data-binding - 如何避免 DataBinding 中的大量通知

转载 作者:行者123 更新时间:2023-12-04 07:05:25 25 4
gpt4 key购买 nike

我想这在数据绑定(bind)场景中是一个很常见的问题。
如果您正在运行批量更新并希望避免每次更新都执行属性更改依赖计算/操作/任何内容,您通常会做什么?

我通常想到的第一件事是引入一个新的 bool 值或取消 Hook / Hook 事件处理程序,...

我不喜欢这种方法的是:

  • 它们引入了新的复杂性(必须维护,...)
  • 它们容易出错,因为您必须确保在之后发送抑制通知

  • 我想知道是否有人已经以更容易处理的更方便的方式解决了这个问题?

    蒂亚
    马丁

    编辑:不要误会我。我知道 .NET 提供的东西,比如来自 BindingList 的 RaiseListChangedEvents,......它们都以与我描述的方式大致相同的方式解决问题,但我正在寻找一种不必列出缺点的不同方式.
    也许我走错了路,但我虽然在这里试一试......

    最佳答案

    不幸的是,没有一个万能的解决方案。我已经应用或看到了以下解决方案:

  • 有两个单音。当更改来自用户操作时,会发出一个信号,而另一个始终会触发。这允许区分 UI 中的更改和代码更新。
  • 保护代码的 bool 值
  • 当值没有真正改变时,属性事件框架会自动停止传播事件。
  • 信号或信号管理器(即整个框架)的卡住/解冻方法
  • 一种将信号合并为单个信号的方法。您可以进行 N 次更新,并将它们收集到 M 个信号中,其中 M <= N。如果您将同一属性更改 100 次,您仍然只能获得 1 个信号。
  • 信号排队(而不是同步执行)。然后排队代码也可以合并信号。我在一个没有“保存”按钮的应用程序中成功地使用了它。在您进行更改时,所有更改都会保存到数据库中。当您更改文本时,更改会在一定时间内合并(即直到先前的数据库更新返回),然后将它们作为单个更改提交。
  • 一次设置多个值的 API;只发出一个信号。
  • 信号框架可以发送不同粒度级别的信号。假设你有一个有名字的人。当您更改名称时,您会收到两个信号:一个是名称更改,另一个是“实例字段已更改”。因此,如果您只关心“有什么变化”,那么您可以 Hook 到实例而不是所有字段。
  • 关于data-binding - 如何避免 DataBinding 中的大量通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1177682/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com