Einzelnen Beitrag anzeigen

jus

Registriert seit: 22. Jan 2005
343 Beiträge
 
Delphi 2007 Professional
 
#1

DSharp Binding zeitweise deaktivieren?

  Alt 25. Jun 2019, 00:23
Hallo,

ich setze die Binding Funktion von DSharp ein, um die View Komponente TreeViewPresenter an ein ViewModel zu binden.
Auf der Form/View Seite:
Delphi-Quellcode:
procedure TViewForm.FormCreate(Sender: TObject);
begin
//...
  ViewModel := TViewModel.Create;
  ViewModel.LoadItemsFromDatabase;
  binding := TBinding.Create(ViewModel, 'TreeViewPresenter1Items', TreeViewPresenter1, 'View.ItemsSource');
end;
In ViewModel.pas sieht es dann etwa so aus:
Delphi-Quellcode:

type
  TDataItem = Class
  private
    FValue1: Integer;
  public
  property Value1: Integer read FValue1 write FValue1;
  end;

  TViewModel = Class
  private
    FTreeViewPresenter1Items: IObjectList;
  public
    constructor Create;
    procedure LoadItemsFromDatabase;
  property TreeViewPresenter1Items: IObjectList read FTreeViewPresenter1Items;
  end;

implementation

procedure TViewModel.LoadItemsFromDatabase;
var
  Item: TDataItem;
  i: Integer;
begin
  FTreeViewPresenter1Items.Clear;
  // lade ca. 2000 Einträge aus einer Datenbanktabelle

  for i := 0 to 2000 do
  begin
    Item := TDataItem.Create;
    //Übertrage Zeile für Zeile die Einträge aus der Tabelle in die "FTreeViewPresenter1Items" Liste......
    FTreeViewPresenter1Items.Add(Item);
  end;
end;
Das Binding funktioniert einwandfrei. Doch das Problem beginnt damit, dass von Zeit zu Zeit die FTreeViewPresenter1Items Liste neu aus der Datenbank mit der Methode TViewModel.LoadItemsFromDatabase eingelesen werden muß. In meinem aktuell Fall sind es ca. 2000 Zeile aus einer Tabelle. Dann dauert es wesentlich länger als wenn das Binding nicht nicht wäre. Ohne Binding benötigt die for-Schleife von der Methode TViewModel.LoadItemsFromDatabase <1ms mit Binding ca. 7Sekunden.
Ich habe versucht in der View das Binding.Enabled während auf der Aktualisierung auf FALSE setzen, dies hat zwar leichte Verbesserung von ca.1-2 Sekunden eingespart. Kann man zeitweise das Binding komplett deaktiveren?
Was wäre die Best Practice in so einem Falle?

Lg,
jus

Geändert von jus (25. Jun 2019 um 00:39 Uhr)
  Mit Zitat antworten Zitat