delphi - Delphi中MVC中如何避免循环通知?

标签 delphi model-view-controller design-patterns

我正在尝试在小型应用程序中使用模型- View - Controller 模式。该模型包含一些数据和这样的选择

TModelSelection = record
  CurrentItem : TItem;
end;  

TModel = class
public
  property Items : TList <TItem>;
  property Selection : TModelSelection;
  property Subject : TSubject <TModel>;    // Observer pattern
end;

现在我有一个观察模型的 TreeView 。如果用户在 TreeView 中选择一个项目,则模型选择应该更改。

问题是我遇到了循环更改通知的问题:我更改了 TreeView 的 OnChange 事件中的模型选择。这会导致 TreeView 更新其选择(因为应用程序的其他部分也可以更改选择),从而再次触发 OnChange 事件等。

如何避免这个问题?

最佳答案

仅通知真正的更改。

或者使用标志在更新期间禁用更新。

procedure OnChange(...)
begin
  if FChanging = false then
  begin
    FChanging:=true;
    ... do updates
    FChanging:=false;
  end;
end;

FChanging 是 bool 类型的成员变量

关于delphi - Delphi中MVC中如何避免循环通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1906465/

相关文章:

delphi - 可以在线程中使用 TADOConnection

delphi - 菜单翻转闪烁 - 如何解释鼠标离开事件

php - 如何在 PHP 中创建一个成功的域对象工厂

model-view-controller - 什么是模型 View 呈现器?

java - 如何在Swing应用程序中实现JProgressBar?

php - 在没有smtp的情况下在Delphi中发送电子邮件并在服务器上使用php函数

Delphi 缺少 Brh_Telapi_Tlb.dcu

java - 在 Form .java 文件中检索用于国际化的 Spring 外部化字符串

azure - 404/signalr/negotiate 在 Azure 中部署的应用程序

c++ - C++ 中的多态映射键