ListCollections 샘플 앱을 사용하여 콘트롤과 원본 컴포넌트 사이에서 ListCollections를 빠르게 바인딩하는 방법

– 원문 링크: https://blogs.embarcadero.com/quick-way-to-bind-listcollections-between-control-and-source-component-with-listcollections-sample-app/
– 원문 제목: Quick Way To Bind ListCollections Between Control and Source Component With ListCollections Sample App
– 원문 작성자: Anbarasan

 

샘플 애플리케이션인 ListCollections를 보면, 라이브바인딩스(LiveBindings)를 사용하여 다양한 컬렉션에서 가져온 항목을 리스트박스에 보여주는 방법을 알 수 있다.
델파이와 C++ 코드 샘플은 깃허브(GitHub) 저장소에 있다. RAD스튜디오의 Samples 저장소에서 이름으로 검색해도 찾을 수 있다.

ListCollections 샘플에서 필요한 컴포넌트들

TBindingsListTCustomBindingsList 컴포넌트 기반 위에 몇가지 속성들을 추가 공개한다. 공개된 속성들은 Object Inspector에서 접근할 수 있다.

TBindScope: 비시각적 컴포넌트로써 특정 컴포넌트에 있는 데이터를 다른 모든 컴포넌트에서 접근할 수 있도록 해준다. 라이브바인딩스(LiveBindings)를 사용한다.

이 샘플 애플리케이션에는 TBindList를 통해 리스트박스에 묶일 수 있는 시각적 오브젝트들 몇 개를 사용한다.  SampleCollections.pas에 들어있는 다양한 컬렉션에서 원하는 항목들을 직접 선택하여 나열할 때에는 콤보박스가 사용된다.

SampleCollections.pas 유닛 파일은 컬렉션이 라이브바인딩을 통해 리스트박스로 요소들을 내보낼 수 있도록 지원하는 기능이 추가로 구현되어 있다. 이 샘플은 팩토리 디자인 패턴 클래스를 사용하여 서로  다른 여러가지 타입의 컬랙션을 동적으로 구축한다:
– 딕셔너리 (A Dictionary)
– 오브젝트 리스트 (A list of objets)
– 제네릭스 리스트 (A list of generics)
– 문자열 리스트 (A list of strings)

Control Component 필드와 Control Expression 필드는 편집할 수 없으며, 콘트롤 컴포넌트 (즉 ListBox1)와 그 콘트롤의 표현식을 지정한다.

Source Component 필드도 역시 편집할 수 없으며, 제공자가 되는 컴포넌트를 명시한다. 제공자 컴포넌트는 콤보박스에서 선택할 때마다 달라진다.

Source Expression 필드는 편집할 수 있다. 제공자 컴포넌트에서 정보를 모을 때 적용할 바인딩 표현식을 입력할 수 있다. 이 표현식에서는 숫자를 문자열로 전환하는 ToStr과 같은 컨버전 메소드도 사용할 수 있다.

ListCollections 샘플 앱의 LiveBindings

ListCollections 샘플 앱의 LiveBindings

콤보박스에서 변경이 발생하면 선택된 데이터 오브젝트가 TBindScope 인스턴스 데이터 오브젝트에 할당된다. 그 결과 접근이 필요한 모든 컴포넌트에서 사용할 수 있게 된다.

Fill 버튼을 누를 때마다 (또는 AutoFill 이 선택되어 있거나), 리스트박스는 실행 중에 Collection 콤보박스에서 지정된 컬렉션에서 가져온 항목 100개를 보여준다. 자세한 전체 안내는 DocWiki에 있는 FMX.ListCollections 샘플에 관한 글을 참고하자.

FMX.ListCollections 샘플은 초보자에게는 적합하지 않다. 이 샘플을 충분히 이해하려면, 고급 지식이 있어야 하고, 코드를 읽어야 하고, RTTI를 알아야 하고, 익명메소드(anonymous methods), 디자인 패턴 (Design Patterns) 등 고급 언어 요소를 알아야 한다.

깃허브(GitHub)에 있는 델파이와 C++빌더용 ListCollections 프로젝트의 소스 코드 전체를 살펴보자.