我正在尝试在小型应用程序中使用模型- 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/