![]() |
DSharp, DevExpress Editors, Bindings
Hallo!
Nachdem ich mich einige Tage mit den Delphi LiveBindings herumgeärgert habe, mache ich gerade meine ersten Schritte mit DSharp Bindings. Die Presenter für DevExpress GridView und TreeList habe ich gefunden. Eine Ableitung der DevExpress Editors die das INotifyPropertyChanged Interface implementieren noch nicht. Gibt es eine Unit mit dem Subclassing der DevExpress Editors schon? Wenn ja, wo finde ich sie? Wenn nein, hat sie schon jemand geschrieben und stellt sie zur Verfügung? Bis bald... Thomas |
AW: DSharp, DevExpress Editors, Bindings
Hallo!
Aufgrund des fehlenden Feedbacks stellen sich mir folgende Fragen: 1) Gibt es Nutzer, die die DSharp Bindings aktuell im Produktivbetrieb einsetzen? 2) Kann man mit gutem Gewissen den produktiven Einsatz für neue Anwendungen erwägen? Bis bald... Thomas |
AW: DSharp, DevExpress Editors, Bindings
Zitat:
Zitat:
Zitat:
|
AW: DSharp, DevExpress Editors, Bindings
Hallo!
Vielen Dank für deine schnelle Anwort. Ist schon mal beruhigend, wenn der Entwickler seine eigenen Komponenten verwendet. Ich habe vor ca. 15 Jahren meine eigene Objekt-Binding für die DevExpress Editors geschrieben. Dazu wurde eine Ableitung von TcxEditDataBinding mit Anbindung an das Datenobjekt und einer Eigenschaft geschrieben. Die Bindung sah dann so aus: edtNachname: TcxTITextEdit; // <- TcxTextEdit edtNachname.DataBinding.LinkToData(DataBuffer, 'Nachname'); Für die DSharp Bindings habe ich zu Testzwecken einige Anbindungen für die DevExpress Editors geschrieben (eng angelehnt an die der VCL-Controls). Hat auch sofort funktioniert. Trotzdem würde es mir helfen, wenn du z.B. eure Anbindung für das TcxTextEdit veröffentlichen könntest. Es bleiben für mich einige Fragen offen. Zum Beispiel: Funktioniert eure Bindung einfach über die Eigenschaft "Text" (so habe ich es in meinem ersten Test gelöst) oder den erweiterten DevExpress Ansatz "EditValue". Dann wäre es aber nicht so einfach. Bis bald... Thomas |
AW: DSharp, DevExpress Editors, Bindings
Delphi-Quellcode:
type
TcxTextEdit = class(cxTextEdit.TcxTextEdit, INotifyPropertyChanged) private FNotifyPropertyChanged: TNotifyPropertyChanged; property NotifyPropertyChanged: TNotifyPropertyChanged read FNotifyPropertyChanged implements INotifyPropertyChanged; procedure WMChar(var Message: TWMChar); message WM_CHAR; protected procedure DoTextChanged; override; procedure CMExit(var Message: TCMExit); message CM_EXIT; public constructor Create(AOwner: TComponent); override; end; procedure TcxTextEdit.CMExit(var Message: TCMExit); begin try FNotifyPropertyChanged.NotifyOfPropertyChange('Text', utLostFocus); inherited; except on EValidationError do begin SetFocus; end; end; end; constructor TcxTextEdit.Create(AOwner: TComponent); begin inherited; FNotifyPropertyChanged := TNotifyPropertyChanged.Create(Self); end; procedure TcxTextEdit.DoTextChanged; begin inherited; FNotifyPropertyChanged.NotifyOfPropertyChange('Text'); end; procedure TcxTextEdit.WMChar(var Message: TWMChar); begin inherited; if Message.CharCode = VK_RETURN then begin FNotifyPropertyChanged.NotifyOfPropertyChange('Text', utExplicit); end; end; |
AW: DSharp, DevExpress Editors, Bindings
Hallo!
Danke für den Quellcode. Beruhigend! Eine Eins-zu-eins-Umsetzung wie in meinem Testbeispiel. Wenn sich alle DevExpress Editors so eng an ihr VCL-Pendant anlehnen und keine Fallstricke lauern, ist die Umsetzung wirklich kein Problem. Nochmals vielen Dank für DSharp. Bis bald... Thomas |
AW: DSharp, DevExpress Editors, Bindings
Hallo!
Noch eine Frage zur Source-Kosmetik. Spricht etwas dagegen, in der SubKlasse gleich folgendes zu schreiben:
Code:
Dann reicht im Form z.B.: edtVorname.AddBinding(SourceObject, 'Vorname');
public
function AddBinding(pmSourceObject: TObject; const pmcSourcePropertyName: String; pmBindingGroup: TBindingGroup = Nil): TBinding; function TcxTextEdit.AddBinding(pmSourceObject: TObject; const pmcSourcePropertyName: String; pmBindingGroup: TBindingGroup): TBinding; begin Assert(pmSourceObject <> Nil); Assert(pmcSourcePropertyName <> ''); if pmBindingGroup = Nil then pmBindingGroup := FindBindingGroup(Self.Owner); if pmBindingGroup <> Nil then Result := pmBindingGroup.AddBinding(pmSourceObject, pmcSourcePropertyName, Self, TEXTEDIT_BINDING_PROPNAME, bmTwoWay) else Result := TBinding.Create(pmSourceObject, pmcSourcePropertyName, Self, TEXTEDIT_BINDING_PROPNAME); end; Bis bald... Thomas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 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