anchor.diff:      function    DataAndPropertyValid(const AData: TtiObject): Boolean;
     public
       constructor Create; override;
  -    constructor CreateCustom(AModel: TtiObjectList; AView: TfpgListView; ADisplayNames: string; IsObserving: Boolean = True);
  +    constructor CreateCustom(AModel: TtiObjectList; AView: TfpgListView; ADisplayNames: string; IsObserving: Boolean = True); overload;
  +    constructor CreateCustom(AModel: TtiObjectList; AView: TfpgListView;
  +      AOnBeforeSetupField: TOnBeforeSetupField; ADisplayNames: string; IsObserving: Boolean = True); overload;
       procedure   BeforeDestruction; override;
       procedure   Update(ASubject: TtiObject); override;
       { Called from the GUI to trigger events }
       procedure   HandleSelectionChanged; virtual;
  +    { Event handler to allow formatting of fields before they are written. }
  +    property    OnBeforeSetupField: TOnBeforeSetupField read FOnBeforeSetupField write SetOnBeforeSetupField;
     published
       property    View: TfpgListView read FView;
       property    Model: TtiObjectList read FModel;
  
positive.code:   
  type
  
    { Composite mediator for TfpgListView }
    TCompositeListViewMediator = class(TtiObject)
    private
      function    GetSelectedObject: TtiObject;
      procedure   SetSelectedObject(const AValue: TtiObject);
      procedure   SetShowDeleted(const AValue: Boolean);
      procedure   DoCreateItemMediator(AData: TtiObject);
    protected
      FIsObserving: Boolean;
      FDisplayNames: string;
  
negative.code:   lFieldName: string;
  begin
    Assert(FModel = ASubject);
    for i := 1 to tiNumToken(FDisplayNames, cFieldDelimiter) do
    begin
      lField := tiToken(FDisplayNames, cFieldDelimiter, i);
      lFieldName := tiFieldName(lField);
      
      FView.Cells[i, FRowIndex] := FModel.PropValue[lFieldName];
  