![]() |
Delphi-Version: XE5
XE5: Probleme mit LiveBindings "CheckedState(Self)"
Hallo,
da bin ich wieder. Ich habe jetzt das erstemal mit den LiveBindings gearbeitet bzw. es versucht. Ich habe eine Checkbox und mehrere TEdits auf einem Form platziert. Mittels Livebindings habe ich die Eigenschaft "CheckedState(Self)" der Checkbox mit den Eigenchaften "Enabled" der TEdits verbunden. Wenn ich die Anwendung starte, dann ist die Checkbox NOT Enabled und alle TEdits sind Enabled. Erst wenn ich die Checkbox zweimal betätige (Check / not Check) übernehmen die TEdits den Status. Was mache ich falsch? Nachtrag: Ich habe jetzt alle Bindungen gelöscht und neu hergestellt und jetzt ist der Effekt dieser: Egal ob im Objektinspektor "Checked" gesetzt ist oder nicht, in der EXE ist die Checkbox "Checked". Muß ich jetzt doch noch im OnCreate den Default-Wert setzte? Hatte gehofft, das dieses Visual nicht mehr nötig wäre. Gruß Heiko |
AW: XE5: Probleme mit LiveBindings "CheckedState(Self)"
Zitat:
Dafür nehme ich MVVM, das kann ich immer so hinbiegen wie ich möchte und bin nicht darauf angewiesen, ob Komponente X und Eigenschaft Y auch für Livebindings vorgesehen vorbereitet ist.
Delphi-Quellcode:
unit ViewFormMain;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TViewModel = class private FValue : Boolean; FOnUpdate : TNotifyEvent; procedure SetValue( const Value : Boolean ); protected procedure DoUpdate; public property OnUpdate : TNotifyEvent read FOnUpdate write FOnUpdate; property Value : Boolean read FValue write SetValue; end; TMainFormView = class( TForm ) Edit1 : TEdit; // OI: OnChange => ControlChange Edit2 : TEdit; // OI: OnChange => ControlChange Edit3 : TEdit; // OI: OnChange => ControlChange CheckBox1 : TCheckBox; // OI: OnClick => ControlChange procedure ControlChange( Sender : TObject ); procedure FormShow( Sender : TObject ); private FModelLoading : Boolean; FViewModel : TViewModel; protected procedure DoLoadFromModel; virtual; procedure DoSaveToModel; virtual; procedure ViewModelUpdate( Sender : TObject ); protected procedure LoadFromModel; procedure SaveToModel; procedure SyncWithModel; public procedure AfterConstruction; override; procedure BeforeDestruction; override; property ViewModel : TViewModel read FViewModel; end; var MainFormView : TMainFormView; implementation {$R *.dfm} { TForm1 } procedure TMainFormView.AfterConstruction; begin inherited; FViewModel := TViewModel.Create; FViewModel.OnUpdate := ViewModelUpdate; end; procedure TMainFormView.BeforeDestruction; begin inherited; FViewModel.Free; end; procedure TMainFormView.ControlChange( Sender : TObject ); begin SyncWithModel; end; procedure TMainFormView.DoLoadFromModel; begin // Binding Model => View CheckBox1.Checked := ViewModel.Value; Edit1.Enabled := not ViewModel.Value; Edit2.Enabled := not ViewModel.Value; Edit3.Enabled := not ViewModel.Value; end; procedure TMainFormView.DoSaveToModel; begin // Binding View => Model ViewModel.Value := CheckBox1.Checked; end; procedure TMainFormView.FormShow( Sender : TObject ); begin LoadFromModel; end; procedure TMainFormView.LoadFromModel; begin if FModelLoading then Exit; FModelLoading := True; try DoLoadFromModel; finally FModelLoading := False; end; end; procedure TMainFormView.SaveToModel; begin if FModelLoading then Exit; DoSaveToModel; end; procedure TMainFormView.SyncWithModel; begin SaveToModel; LoadFromModel; end; procedure TMainFormView.ViewModelUpdate( Sender : TObject ); begin LoadFromModel; end; { TViewModel } procedure TViewModel.DoUpdate; begin if Assigned( OnUpdate ) then OnUpdate( Self ); end; procedure TViewModel.SetValue( const Value : Boolean ); begin if Value = FValue then Exit; FValue := Value; DoUpdate; end; end. |
AW: XE5: Probleme mit LiveBindings "CheckedState(Self)"
N'abend,
Zitat:
Zitat:
Gruß Heiko |
AW: XE5: Probleme mit LiveBindings "CheckedState(Self)"
Ich weiß zwar spontan auch nicht, wo im VCL/FMX-Quellcode das so geregelt wird, aber beim Erstellen des Formulars geht es einmal anders herum: Die Checkbox richtet ihr Kreuzchen danach, ob die Edits die sie steuern soll, enabled sind oder nicht.
|
AW: XE5: Probleme mit LiveBindings "CheckedState(Self)"
Sorry, dass ich einen alten Thread wieder rauskrame, aber in Moment beschäftige ich mich mit MVVM und bin zufällig über das geniale Beispiel von Sir Rufo gestoplert. Meine Frage ist, kann man eigentlich sagen, dass die folgenden zwei Methoden eigentlich schon die konkrete Implementierung von ViewModel sind?
Zitat:
jus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz