다음을 통해 공유


바인딩 소스 개요

데이터 바인딩에서 바인딩 소스 개체는 데이터를 가져온 개체를 참조합니다. 이 항목에서는 바인딩 소스로 사용할 수 있는 개체 형식에 대해 설명합니다.

이 항목에는 다음 단원이 포함되어 있습니다.

  • 바인딩 소스 형식
  • 바인딩 소스 클래스 구현
  • 전체 개체를 바인딩 소스로 사용
  • 컬렉션 개체를 바인딩 소스로 사용
  • 데이터 바인딩의 권한 요구 사항
  • 관련 항목

바인딩 소스 형식

Windows Presentation Foundation (WPF) 데이터 바인딩에서는 다음과 같은 바인딩 소스 형식을 지원합니다.

바인딩 소스

설명

common language runtime (CLR) 개체

모든 common language runtime (CLR) 개체의 공용 속성, 하위 속성 및 인덱서를 바인딩할 수 있습니다. 바인딩 엔진에서는 CLR 리플렉션을 사용하여 속성 값을 가져옵니다. 또는 ICustomTypeDescriptor를 구현하거나 TypeDescriptionProvider를 등록한 개체를 바인딩 엔진에서 사용할 수도 있습니다.

바인딩 소스 개체로 사용할 수 있는 클래스를 구현하는 방법에 대한 자세한 내용은 이 항목의 뒷부분에 나오는 바인딩 소스 클래스 구현을 참조하십시오.

동적 개체

IDynamicMetaObjectProvider 인터페이스를 구현하는 개체의 사용 가능한 속성 및 인덱서에 바인딩할 수 있습니다. 코드에서 멤버에 액세스할 수 있으면 해당 멤버에 바인딩할 수 있습니다. 예를 들어 동적 개체를 사용할 경우 코드에서 someObjet.AProperty를 통해 멤버에 액세스할 수 있으면 AProperty에 대한 바인딩 경로를 설정하여 해당 멤버에 바인딩할 수 있습니다.

ADO.NET 개체

DataTable과 같은 ADO.NET 개체에 바인딩할 수 있습니다. ADO.NET DataView는 바인딩 엔진이 수신하는 변경 알림을 제공하는 IBindingList 인터페이스를 구현합니다.

XML 개체

XmlNode, XmlDocument 또는 XmlElement에서 XPath 쿼리를 바인딩하고 실행할 수 있습니다. 태그에서 바인딩 소스인 XML 데이터에 간편하게 액세스할 수 있는 방법은 XmlDataProvider 개체를 사용하는 것입니다. 자세한 내용은 방법: XMLData Provider 및 XPath 쿼리를 사용하여 XML 데이터에 바인딩을 참조하십시오.

또는 XElementXDocument에 바인딩하거나, LINQ to XML을 사용하여 이러한 형식의 개체에 대해 실행한 쿼리 결과에 바인딩할 수도 있습니다. LINQ to XML을 사용하여 태그에서 바인딩 소스인 XML 데이터에 간편하게 액세스하려면 ObjectDataProvider 개체를 사용하는 것이 좋습니다. 자세한 내용은 방법: XDocument, XElement 또는 LINQ for XML 쿼리 결과에 바인딩을 참조하십시오.

DependencyObject 개체

모든 DependencyObject의 종속성 속성에 바인딩할 수 있습니다. 예제를 보려면 방법: 두 컨트롤의 속성 바인딩을 참조하십시오.

바인딩 소스 클래스 구현

사용자의 고유한 바인딩 소스를 만들 수 있습니다. 이 단원에서는 바인딩 소스 개체로 사용할 클래스를 구현하는 경우 알아야 하는 사항에 대해 설명합니다.

변경 알림 제공

OneWay 또는 TwoWay 바인딩을 사용하는 경우(바인딩 소스 속성이 동적으로 변경될 때 UI를 업데이트하려는 경우) 적절한 속성 변경 알림 메커니즘을 구현해야 합니다. 권장 메커니즘은 CLR 또는 동적 클래스로 INotifyPropertyChanged 인터페이스를 구현하는 것입니다. 자세한 내용은 방법: 속성 변경 알림 구현을 참조하십시오.

INotifyPropertyChanged를 구현하지 않는 CLR 개체를 만들면 바인딩에 사용되는 데이터를 최신 상태로 유지하는 고유한 알림 시스템을 배치해야 합니다. 변경 알림을 제공할 각 속성에 대해 PropertyChanged 패턴을 지원하여 변경 알림을 제공할 수 있습니다. 이 패턴을 지원하려면 각 속성에 대해 PropertyNameChanged 이벤트를 정의해야 합니다. 여기서 PropertyName은 속성의 이름입니다. 속성이 변경될 때마다 이 이벤트를 발생시킵니다.

바인딩 소스가 이러한 알림 메커니즘 중 하나를 구현하면 대상이 자동으로 업데이트됩니다. 하지만 어떤 이유로 바인딩 소스에서 올바른 속성 변경 알림을 제공하지 않는 경우 UpdateTarget 메서드를 사용하여 대상 속성을 명시적으로 업데이트할 수도 있습니다.

기타 특성

다음 목록에서는 다른 중요한 주의 사항에 대해 설명합니다.

  • XAML에서 개체를 만들려면 클래스에 기본 생성자가 있어야 합니다. C# 같은 일부 .NET 언어에서는 기본 생성자를 제공합니다.

  • 바인딩의 바인딩 소스 속성으로 사용할 속성은 클래스의 공용 속성이어야 합니다. 명시적으로 정의된 인터페이스 속성은 바인딩 용도로 액세스할 수 없으며 기본 구현이 없는 보호, 전용 및 내부 또는 가상 속성도 바인딩 용도로 액세스할 수 없습니다.

  • 공용 필드에는 바인딩할 수 없습니다.

  • 클래스에 선언된 속성의 형식이 바인딩에 전달되는 형식입니다. 하지만 바인딩에 최종적으로 사용되는 형식은 바인딩 소스 속성의 형식이 아니라 바인딩 대상 속성의 형식에 따라 달라집니다. 형식에 차이가 있는 경우에는 사용자 지정 속성이 처음 바인딩에 전달되는 방식을 처리하는 변환기를 작성할 수 있습니다. 자세한 내용은 IValueConverter를 참조하십시오.

전체 개체를 바인딩 소스로 사용

전체 개체를 바인딩 소스로 사용할 수 있습니다. Source 또는 DataContext 속성을 사용하여 바인딩 소스를 지정한 다음 빈 바인딩 선언({Binding})을 제공하면 됩니다. 이 기능이 유용한 시나리오로는 문자열 형식의 개체에 바인딩하거나, 관심 속성이 여러 개인 개체에 바인딩하거나, 컬렉션 개체에 바인딩하는 경우를 들 수 있습니다. 전체 컬렉션 개체에 바인딩하는 경우의 예제를 보려면 방법: 계층적 데이터에 마스터-세부 패턴 사용을 참조하십시오.

바인딩된 대상 속성에서 데이터가 의미를 갖게 하기 위해 사용자 지정 논리를 적용해야 하는 경우가 있습니다. 사용자 지정 논리는 사용자 지정 변환기(기본 형식 변환기가 없는 경우)의 형태나 DataTemplate이 될 수 있습니다. 변환기에 대한 자세한 내용은 데이터 바인딩 개요의 데이터 변환 단원을 참조하십시오. 데이터 템플릿에 대한 자세한 내용은 데이터 템플릿 개요를 참조하십시오.

컬렉션 개체를 바인딩 소스로 사용

바인딩 소스로 사용하려는 개체가 사용자 지정 개체 컬렉션인 경우가 종종 있습니다. 이 경우 각 개체는 반복되는 바인딩의 특정 인스턴스에 대한 소스로 사용됩니다. 예를 들어 CustomerOrder 개체로 구성된 CustomerOrders 컬렉션이 있을 수 있습니다. 이 경우 응용 프로그램에서는 해당 컬렉션을 반복 처리하여 주문의 수와 각 주문에 포함된 데이터를 확인할 수 있습니다.

IEnumerable 인터페이스를 구현하는 모든 컬렉션을 열거할 수 있습니다. 그러나 컬렉션에서 삽입이나 삭제를 수행할 때 UI가 자동으로 업데이트되도록 동적 바인딩을 설정하려면 컬렉션에서 INotifyCollectionChanged 인터페이스를 구현해야 합니다. 이 인터페이스는 내부 컬렉션이 변경될 때마다 발생해야 하는 이벤트를 노출합니다.

ObservableCollection<T> 클래스는 INotifyCollectionChanged 인터페이스를 노출하는 데이터 컬렉션에 대한 기본 제공 구현입니다. 컬렉션 내의 개별 데이터 개체는 앞의 단원에 설명된 요구 사항에 맞아야 합니다. 예제를 보려면 방법: ObservableCollection 만들기 및 바인딩을 참조하십시오. 컬렉션을 직접 구현하는 대신 ObservableCollection<T>을 사용하거나 List<T>, Collection<T>BindingList<T>를 비롯한 기존 컬렉션 클래스 중 하나를 사용하는 것이 좋습니다.

WPF는 컬렉션에 직접 바인딩되지 않습니다. 바인딩 소스로 컬렉션을 지정하면 WPF는 컬렉션의 기본 뷰에 바인딩됩니다. 기본 뷰에 대한 자세한 내용은 데이터 바인딩 개요를 참조하십시오.

고급 시나리오에 따라 고유한 컬렉션을 구현하려면 IList 인터페이스를 사용하는 것이 좋습니다. IList는 인덱스에 따라 개별적으로 액세스할 수 있는 개체의 제네릭이 아닌 컬렉션을 제공하여 성능을 향상시킬 수 있습니다.

데이터 바인딩의 권한 요구 사항

데이터 바인딩을 수행할 경우 응용 프로그램의 신뢰 수준을 고려해야 합니다. 다음 표에서는 완전 신뢰 또는 부분 신뢰 상황에서 실행되는 응용 프로그램에 바인딩할 수 있는 속성 형식을 요약하여 보여 줍니다.

속성 형식

(모든 액세스 한정자)

동적 개체 속성

동적 개체 속성

CLR 속성

CLR 속성

종속성 속성

종속성 속성

신뢰 수준

완전 신뢰

부분 신뢰

완전 신뢰

부분 신뢰

완전 신뢰

부분 신뢰

Public 클래스

비공용 클래스

아니요

아니요

이 표에서는 다음과 같이 데이터 바인딩의 중요한 권한 요구 사항에 대해 설명합니다.

  • CLR 속성의 경우 데이터 바인딩은 바인딩 엔진에서 리플렉션을 사용하여 바인딩 소스 속성에 액세스할 수 있는 한은 계속해서 작동합니다. 그렇지 않은 경우에는 바인딩 엔진에서 속성을 찾을 수 없어 대체(fallback) 값이나 기본값(사용할 수 있는 경우)을 사용한다는 경고 메시지가 표시됩니다.

  • 컴파일 타임 또는 런타임에 정의되는 동적 개체의 속성에 바인딩할 수 있습니다.

  • 종속성 속성에는 항상 바인딩할 수 있습니다.

XML 바인딩에 대한 권한 요구 사항은 데이터 바인딩에 대한 권한 요구 사항과 유사합니다. 부분 신뢰 샌드박스에서 지정된 데이터에 액세스할 수 있는 권한이 없으면 XmlDataProvider가 실패합니다.

무명 형식의 개체는 내부 개체입니다. 완전 신뢰 수준에서 실행되는 경우에만 무명 형식의 속성에 바인딩할 수 있습니다. 익명 형식에 대한 자세한 내용은 익명 형식(C# 프로그래밍 가이드) 또는 익명 형식(Visual Basic)(Visual Basic)을 참조하십시오.

부분 신뢰 보안에 대한 자세한 내용은 WPF 부분 신뢰 보안을 참조하십시오.

참고 항목

작업

방법: 바인딩 소스 지정

참조

ObjectDataProvider

XmlDataProvider

개념

데이터 바인딩 개요

LINQ to XML을 사용한 WPF 데이터 바인딩 개요

성능 최적화: 데이터 바인딩

기타 리소스

데이터 바인딩 방법 항목