当绑定对象的属性发生变化时,如何通知Spring4D的 TObjectDataSet?

编程语言 2026-07-09

附加网格中显示的值在使用 ObjectDataSet.FieldByName('Description').AsString:='Bob'; 时会更新,但在调用 ObjectDataSet.GetCurrentModel<TSaleLine>.Description:='Bob'; 时不会更新。

这是可以理解的,因为TObjectDataSet并未监控对象属性,因此对变化毫无察觉。

我想为TObjectDataSet增加OnPropertyChanged支持,以监控当前模型的变化,这将像字段变化时那样触发DataEvent(deFieldChange,),但我还没想清楚如何触发它。

我已经尝试了下面这些,但都不行。

type
  TL = class(TGridDataLink);

begin
  ObjectDataSet.GetCurrentModel<TSaleLine>.Description:='Bob';

  var G:=TGridDataLink.Create(Grid);
  TL(G).RecordChanged(ObjectDataSet.FieldByName('Description'));
  G.Free;
end;

解决方案

相关步骤如下:

  • 列表中对象的类需要实现 Spring.INotifyPropertyChanged,但不能进行引用计数——最好让它们从 Spring.TInterfaceBase 继承。
  • 列表需要是一个可观察的列表——通过 Spring.Collections.TCollections.CreateObservableList 来创建。
  • ObjectDataSet需要具备 TrackChanges := True
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章