바인딩 소스 개요
업데이트: 2007년 11월
데이터 바인딩에서 바인딩 소스(소스) 개체는 데이터를 가져온 개체를 참조합니다. 이 항목에서는 소스로 사용할 수 있는 개체 형식에 대해 설명합니다.
이 항목에는 다음 단원이 포함되어 있습니다.
- 바인딩 소스
- 바인딩 소스 개체로 CLR 클래스 사용
- 바인딩 소스로 사용되는 전체 개체
- 바인딩 소스로 사용되는 컬렉션 개체
- 권한 요구 사항
- 관련 항목
바인딩 소스
WPF(Windows Presentation Foundation) 데이터 바인딩에서는 다음과 같은 형식의 바인딩 소스를 지원합니다.
바인딩 소스 |
설명 |
---|---|
CLR(공용 언어 런타임) 개체 |
모든 CLR(공용 언어 런타임) 개체의 공용 속성, 하위 속성 및 인덱서를 바인딩할 수 있습니다. 바인딩 엔진에서는 CLR 리플렉션을 사용하여 속성 값을 가져옵니다. 또는 ICustomTypeDescriptor를 구현하거나 TypeDescriptionProvider를 등록한 개체를 바인딩 엔진에서 사용할 수도 있습니다. 소스 개체로 사용할 수 있는 클래스를 구현하는 방법에 대한 자세한 내용은 다음 단원을 참조하십시오. |
ADO.NET 데이터 |
DataTable과 같은 ADO.NET 개체에 바인딩할 수 있습니다. ADO.NET DataView는 IBindingList를 구현하여 바인딩 엔진이 수신하는 변경 알림을 제공합니다. 예제를 보려면 ADO.NET 데이터 집합 바인딩 샘플을 참조하십시오. |
XML 데이터 |
XmlNode, XmlDocument 또는 XmlElement에서 XPath 쿼리를 바인딩하고 실행할 수 있습니다. 태그에서 바인딩 소스인 XML 데이터에 간편하게 액세스할 수 있는 방법은 XmlDataProvider 개체를 사용하는 것입니다. 자세한 내용은 방법: XMLData Provider 및 XPath 쿼리를 사용하여 XML 데이터에 바인딩을 참조하십시오. 또는 XElement나 XDocument에 바인딩하거나, LINQ for XML을 사용하여 이러한 형식의 개체에 대해 실행한 쿼리 결과에 바인딩할 수도 있습니다. 태그에서 바인딩 소스인 XML 데이터에 간편하게 액세스하려면 ObjectDataProvider 개체를 사용하는 것이 좋습니다. 자세한 내용은 방법: XDocument, XElement 또는 LINQ for XML 쿼리 결과에 바인딩을 참조하십시오. |
모든 DependencyObject의 종속성 속성에 바인딩할 수 있습니다. 예제를 보려면 방법: 두 컨트롤의 속성 바인딩을 참조하십시오. |
바인딩 소스 개체로 CLR 클래스 사용
이 단원에서는 소스 개체로 사용할 CLR 클래스를 구현하는 경우 알아야 하는 사항에 대해 설명합니다.
변경 알림 제공
OneWay 또는 TwoWay 바인딩을 사용하는 경우(소스 속성이 동적으로 변경될 때 UI를 업데이트하려는 경우) 적절한 속성 변경 알림 메커니즘을 구현해야 합니다. 권장 메커니즘은 CLR 클래스로 INotifyPropertyChanged 인터페이스를 구현하는 것입니다. 자세한 내용은 방법: 속성 변경 알림 구현을 참조하십시오.
INotifyPropertyChanged를 구현하지 않는 경우 바인딩에 사용되는 데이터를 최신 상태로 유지하는 고유한 알림 시스템을 배치해야 합니다. 변경 알림을 제공할 각 속성에 대해 PropertyChanged 패턴을 지원하여 변경 알림을 제공할 수 있습니다. 이 패턴을 지원하려면 각 속성에 대해 PropertyNameChanged 이벤트를 정의해야 합니다. 여기서 PropertyName은 속성의 이름입니다. 속성이 변경될 때마다 이 이벤트를 발생시킵니다.
소스 개체가 올바른 알림 메커니즘을 구현하면 대상이 자동으로 업데이트됩니다. 하지만 어떤 이유로 소스 개체에서 올바른 속성 변경 알림을 제공하지 않는 경우 UpdateTarget 메서드를 사용하여 대상 속성을 명시적으로 업데이트할 수도 있습니다.
기타 특성
다음 목록에서는 다른 중요한 주의 사항에 대해 설명합니다.
XAML에서 개체를 만들려면 클래스에 기본 생성자가 있어야 합니다. C# 같은 일부 .NET 언어에서는 기본 생성자를 제공합니다.
바인딩의 소스 속성으로 사용할 속성은 클래스의 공용 속성이어야 합니다. 명시적으로 정의된 인터페이스 속성은 바인딩 용도로 액세스할 수 없으며 기본 구현이 없는 보호, 전용 및 가상 속성도 바인딩 용도로 액세스할 수 없습니다.
CLR 클래스의 공용 필드에 바인딩할 수 없습니다.
클래스에 선언된 속성의 형식이 바인딩에 전달되는 형식입니다. 하지만 바인딩에 최종적으로 사용되는 형식은 소스 속성의 형식이 아니라 바인딩 대상 속성의 형식에 따라 달라집니다. 형식에 차이가 있는 경우에는 사용자 지정 속성이 처음 바인딩에 전달되는 방식을 처리하는 변환기를 작성할 수 있습니다. 자세한 내용은 IValueConverter를 참조하십시오.
바인딩 소스로 사용되는 전체 개체
전체 개체를 바인딩 소스로 사용할 수 있습니다. 이 작업을 수행하려면 Source 또는 DataContext 속성을 사용하여 개체를 바인딩 소스로 지정한 후 빈 바인딩 선언({Binding}) 다음에 경로를 제공하지 마십시오. 이 기능이 유용한 시나리오로는 문자열 형식의 개체에 바인딩하거나, 관심 속성이 여러 개인 개체에 바인딩하거나, 컬렉션 개체에 바인딩하는 경우를 들 수 있습니다. 전체 컬렉션 개체에 바인딩하는 경우의 예제를 보려면 방법: 계층적 데이터에 마스터-세부 패턴 사용을 참조하십시오.
바인딩된 대상 속성에서 데이터가 의미를 갖게 하기 위해 사용자 지정 논리를 적용해야 하는 경우가 있습니다. 사용자 지정 논리는 사용자 지정 변환기(기본 형식 변환기가 없는 경우)의 형태나 DataTemplate이 될 수 있습니다. 변환기에 대한 자세한 내용은 데이터 바인딩 개요의 데이터 변환 단원을 참조하십시오. 데이터 템플릿에 대한 자세한 내용은 데이터 템플릿 개요를 참조하십시오.
바인딩 소스로 사용되는 컬렉션 개체
때에 따라서는 소스로 사용하려는 개체가 사용자 지정 개체들로 이루어진 컬렉션이고, 그 각각의 개체가 한 반복 바인딩 인스턴스의 소스로 사용되는 데이터 개체를 나타내는 경우가 있습니다. 예를 들어 CustomerOrder 개체로 구성된 CustomerOrders 컬렉션이 있을 수 있습니다. 이 경우 응용 프로그램에서는 해당 컬렉션을 반복 처리하여 주문의 수와 각 주문에 포함된 데이터를 확인할 수 있습니다.
IEnumerable 인터페이스를 구현하는 모든 컬렉션을 열거할 수 있습니다. 그러나 컬렉션에서 삽입이나 삭제를 수행할 때 UI가 자동으로 업데이트되도록 동적 바인딩을 설정하려면 컬렉션에서 INotifyCollectionChanged 인터페이스를 구현해야 합니다. 이 인터페이스는 내부 컬렉션이 변경될 때마다 발생해야 하는 이벤트를 노출합니다.
WPF에서는 INotifyCollectionChanged 인터페이스를 노출하는 데이터 컬렉션에 대한 기본 제공 구현인 ObservableCollection<T> 클래스를 제공합니다. 컬렉션 내의 개별 데이터 개체는 이전 단원에 설명된 요구 사항에 맞아야 합니다. 예제를 보려면 방법: ObservableCollection 만들기 및 바인딩을 참조하십시오. 컬렉션을 직접 구현하는 대신 ObservableCollection<T>을 사용하거나 List<T>, Collection<T> 및 BindingList<T>을 비롯한 기존 컬렉션 클래스 중 하나를 사용하는 것이 좋습니다.
WPF는 컬렉션에 직접 바인딩되지 않습니다. 데이터 소스로 컬렉션을 지정하면 WPF는 컬렉션의 기본 뷰에 바인딩됩니다. 기본 뷰에 대한 자세한 내용은 데이터 바인딩 개요를 참조하십시오.
고급 시나리오에서 컬렉션을 직접 구현해야 하는 경우 인덱스에 따라 개별적으로 액세스할 수 있는 개체의 제네릭이 아닌 컬렉션을 제공하고 성능이 가장 높은 IList를 사용하는 것이 좋습니다.
권한 요구 사항
다음 표에서는 완전 신뢰 또는 부분 신뢰 상황에서 실행되는 응용 프로그램에 바인딩할 수 있는 속성 형식을 요약하여 보여 줍니다.
속성 형식 (모든 액세스 한정자) |
CLR 속성 |
CLR 속성 |
종속성 속성 |
종속성 속성 |
---|---|---|---|---|
신뢰 수준 |
완전 신뢰 |
부분 신뢰 |
완전 신뢰 |
부분 신뢰 |
Public 클래스 |
예 |
예 |
예 |
예 |
Private 클래스 |
예 |
아니요 |
예 |
예 |
이 표에서는 다음과 같이 데이터 바인딩의 중요한 권한 요구 사항에 대해 설명합니다.
CLR 속성의 경우 데이터 바인딩은 바인딩 엔진에서 리플렉션을 사용하여 소스 속성에 액세스할 수 있는 한은 계속해서 작동합니다. 그렇지 않은 경우에는 바인딩 엔진에서 속성을 찾을 수 없어 대체(fallback) 값이나 기본값(사용할 수 있는 경우)을 사용한다는 경고 메시지가 표시됩니다.
종속성 속성에는 항상 바인딩할 수 있습니다.
XML 바인딩에 대한 권한 요구 사항도 이와 유사합니다. 부분 신뢰 샌드박스에서, 지정된 데이터에 액세스할 수 있는 권한이 없으면 XmlDataProvider가 실패합니다.
부분 신뢰 보안에 대한 자세한 내용은 Windows Presentation Foundation 부분 신뢰 보안을 참조하십시오.
참고 항목
작업
개념
LINQ to XML을 사용한 WPF 데이터 바인딩 개요