Search the Community
Showing results for tags 'livebindings'.
Found 2 results
-
Typecasting interfaces to keep code loosely coupled and LiveBinsings
Carlos Tré posted a topic in Algorithms, Data Structures and Class Design
Dear fellow programmers, I'm trying to stick to Nick Hodges advice and keep the code loosely coupled, separating business from presentation, and observing oop principles. In order to accomplish this I: 1) code against interfaces; 2) adopted a sort of MVVM design pattern. Sort of because i don't really understand the difference among MVVM, MVC, MVP, etc. I thought that if I have business logic, view logic and persistence logic in separated units, apart from the views, and fully testable, I'd would be Ok to go; 3) I use Spring4D all around because in the future I want to take advantage of it's dependency injection capabilities. When it came to implement LiveBindings I stumbled into a problem: in order to create the adapters I need the actual classes, and to make the class implementation details visible in the module I call ViewModel would defeat all the isolation I accomplished so far. The solution I came up with is to keep interfaces in one module, implement them with abstract classes in another codeless module, and inherit from them and writing all the code in a third unit. I could keep the interface and it's abstract implementation in the same unit, both have no code, or separated and add another level of organization. That said, I kindly ask for your input on the solution I came up with. My goal is to keep Nick happy with interfaces, keep Delphi happy with classes, and myself happy with Spring4D. Is this the way to go or is there a better solution? Thank you so very much in advance . Best regards, Carlos Tré -
Hello, I tryed generate LiveBindings by Code. I am used from example this code procedure Bind(const Source: TObject; const SourcePropertyName: string; const Target: TObject; const TargetPropertyName: string); var lSrcProperty,lDstProperty:string; lAssocInput,lAssocOutput:IScope; lManaged:TBindingExpression; begin lAssocInput:=TBindings.CreateAssociationScope([Associate(Source,'Src')]); lAssocOutput:=TBindings.CreateAssociationScope([Associate(Target, 'Dst')]); lSrcProperty:='Src.'+ SourcePropertyName; lDstProperty:='Dst.'+ TargetPropertyName; lManaged:=TBindings.CreateManagedBinding( [lAssocInput],lSrcProperty, [lAssocOutput],lDstProperty, nil, nil,[coNotifyOutput]); BindingExpressions.Add(lManaged); end; This is OK if I used for example: Bind(srcViewModel,'String',dstEdit,'Text') Bind(srcViewModel,'Number',dstEdit,'Text') Bind(srcViewModel,'Boolean',dstCheckBox,'Checked') But I have srcViewModel.Container.DataSource and on form DBGrid (I NEED DBGrid). When I Use Bind(srcViewModel,'Container.DataSource',dstDBGrid,'DataSource') is OK,but when I use TBindings.Notify application says DBGrid don't have property DataSource. Why? What problem when I binding DataSource to DataSource?