LINQ to XML로 WPF 데이터 바인딩 개요WPF Data Binding with LINQ to XML Overview

이 항목에서는 System.Xml.Linq 네임스페이스의 동적 데이터 바인딩 기능에 대해 소개합니다.This topic introduces the dynamic data binding features in the System.Xml.Linq namespace. 이러한 기능을 WPF(Windows Presentation Foundation)의 UI(사용자 인터페이스) 요소에 대한 데이터 소스로 사용할 수 있습니다.These features can be used as a data source for user interface (UI) elements in the Windows Presentation Foundation (WPF).

XAML 및 LINQ to XMLXAML and LINQ to XML

XAML(eXtensible Application Markup Language)은 .NET Framework 3.0 기술을 지원하기 위해 Microsoft에서 만드는 XML 언어입니다.The Extensible Application Markup Language (XAML) is an XML dialect created by Microsoft to support .NET Framework 3.0 technologies. XAML은 사용자 인터페이스 요소와 이벤트 및 데이터 바인딩과 같은 관련 기능을 나타내기 위해 WPF에서 사용됩니다.It is used in WPF to represent user interface elements and related features, such as events and data binding. Windows Workflow Foundation에서 XAML은 프로그램 제어(워크플로)와 같은 프로그램 구조를 나타내는 데 사용됩니다.In Windows Workflow Foundation, XAML is used to represent program structure, such as program control (workflows). XAML을 통해 프로그램의 더욱 개별화된 동작을 정의하는 기술의 선언적 측면을 관련 절차형 코드에서 분리할 수 있습니다.XAML enables the declarative aspects of a technology to be separated from the related procedural code that defines the more individualized behavior of a program.

XAML과 LINQ to XML은 다음 두 가지 주요 방식으로 상호 작용할 수 있습니다.There are two broad ways that XAML and LINQ to XML can interact:

  • XAML 파일이 제대로 구성된 XML이기 때문에 LINQ to XML과 같은 XML 기술을 통해 XAML 파일을 쿼리하고 조작할 수 있습니다.Because XAML files are well-formed XML, they can be queried and manipulated through XML technologies such as LINQ to XML.

  • LINQ to XML 쿼리가 데이터 소스를 나타내기 때문에 이러한 쿼리를 WPF UI 요소의 데이터 바인딩에 대한 데이터 소스로 사용할 수 있습니다.Because LINQ to XML queries represent a source of data, these queries can be used as a data source for data binding for WPF UI elements.

    이 문서에서는 두 번째 시나리오에 대해 설명합니다.This documentation describes the second scenario.

Windows Presentation Foundation의 데이터 바인딩Data Binding in the Windows Presentation Foundation

WPF 데이터 바인딩을 통해 UI 요소에서 속성 중 하나를 데이터 소스와 연결할 수 있습니다.WPF data binding enables a UI element to associate one of its properties with a data source. 이에 대한 간단한 예는 사용자 정의 개체에서 public 속성의 값을 제공하는 텍스트가 포함된 Label입니다.A simple example of this is a Label whose text presents the value of a public property in a user-defined object. WPF 데이터 바인딩은 다음 구성 요소를 사용합니다.WPF data binding relies on the following components:

구성 요소Component 설명Description
바인딩 대상Binding target 데이터 소스와 연결할 UI 요소입니다.The UI element to be associated with the data source. WPF의 시각적 요소는 UIElement 클래스에서 파생됩니다.Visual elements in WPF are derived from the UIElement class.
대상 속성Target property 데이터 바인딩 원본의 값을 반영하는 바인딩 대상의 종속성 속성입니다.The dependency property of the binding target that reflects the value of the data-binding source. 종속성 속성은 DependencyObject가 파생되는 UIElement 클래스에서 직접 지원합니다.Dependency properties are directly supported by the DependencyObject class, which UIElement derives from.
바인딩 원본Binding source 표시하기 위해 UI 요소에 제공되는 하나 이상의 값에 대한 원본 개체입니다.The source object for one or more values that are supplied to the UI element for presentation. WPF는 CLR 개체, ADO.NET 데이터 개체, XML 데이터(XPath 또는 LINQ to XML 쿼리의 데이터) 또는 다른 DependencyObject를 바인딩 원본으로 자동으로 지원합니다.WPF automatically supports the following types as binding sources: CLR objects, ADO.NET data objects, XML data (from XPath or LINQ to XML queries), or another DependencyObject.
원본 경로Source path 바인딩될 값이나 값의 집합으로 확인되는 바인딩 원본의 속성입니다.The property of the binding source that resolves to the value or set of values that is to be bound.

종속성 속성은 UI 요소의 동적으로 계산된 속성을 나타내는 WPF에 특정한 개념입니다.A dependency property is a concept specific to WPF that represent a dynamically computed property of a UI element. 예를 들어, 종속성 속성에는 기본값이나 부모 요소에서 제공하는 값이 있는 경우가 많습니다.For example, dependency properties often have default values or values that are provided by a parent element. 이러한 특수 속성은 표준 속성의 경우처럼 필드가 아니라 DependencyProperty 클래스의 인스턴스로 지원됩니다.These special properties are backed by instances of the DependencyProperty class (and not fields as with standard properties). 자세한 내용은 종속성 속성 개요를 참조하세요.For more information, see Dependency Properties Overview.

WPF의 동적 데이터 바인딩Dynamic Data Binding in WPF

기본적으로 데이터 바인딩은 대상 UI 요소가 초기화될 때만 발생합니다.By default, data binding occurs only when the target UI element is initialized. 이를 일회성 바인딩이라고 합니다.This is called one-time binding. 일회성 바인딩은 대부분의 목적에 충분하지만 일반적으로 데이터 바인딩 솔루션에서는 변경 내용이 다음 중 하나를 사용하여 런타임에 동적으로 전파되어야 합니다.For most purposes, this is insufficient; typically, a data-binding solution requires that the changes be dynamically propagated at run time using one of the following:

  • 단방향 바인딩에서는 한 쪽의 변경 내용이 자동으로 전파됩니다.One-way binding causes the changes to one side to be propagated automatically. 원본의 변경 내용이 대상에 반영되는 경우가 가장 일반적이지만 때때로 그 반대의 경우가 유용할 수 있습니다.Most commonly, changes to the source are reflected in the target, but the reverse can sometimes be useful.

  • 양방향 바인딩에서는 원본의 변경 내용이 대상에 자동으로 전파되고 대상의 변경 내용이 원본에 자동으로 전파됩니다.In two-way binding, changes to the source are automatically propagated to the target, and changes to the target are automatically propagated to the source.

    단방향 또는 양방향 바인딩이 발생하려면 소스에서 INotifyPropertyChanged 인터페이스를 구현하거나 지원되는 각 속성의 PropertyNameChanged 패턴을 사용하는 등의 방법으로 변경 알림 메커니즘을 구현해야 합니다.For one-way or two-way binding to occur, the source must implement a change notification mechanism, for example by implementing the INotifyPropertyChanged interface or by using a PropertyNameChanged pattern for each property supported.

    WPF의 데이터 바인딩에 대한 자세한 내용은 데이터 바인딩(WPF)을 참조하세요.For more information about data binding in WPF, see Data Binding (WPF).

LINQ to XML 클래스의 동적 속성Dynamic Properties in LINQ to XML Classes

대부분의 LINQ to XML 클래스는 적절한 WPF 동적 데이터 소스로 적합하지 않습니다. 가장 유용한 정보 중 일부는 속성이 아니라 메서드를 통해서만 사용할 수 있으며 이러한 클래스의 속성은 변경 알림을 구현하지 않습니다.Most LINQ to XML classes do not qualify as proper WPF dynamic data sources: Some of the most useful information is available only through methods (and not properties), and properties in these classes do not implement change notifications. WPF 데이터 바인딩을 지원하기 위해 LINQ to XML에서는 동적 속성의 집합을 노출합니다.To support WPF data binding, LINQ to XML exposes a set of dynamic properties.

이러한 동적 속성은 XAttributeXElement 클래스에 있는 기존 메서드 및 속성의 기능과 중복되는 특수 런타임 속성이며,These dynamic properties are special run-time properties that duplicate the functionality of existing methods and properties in the XAttribute and XElement classes. WPF의 동적 데이터 소스로 작동하기 위한 목적으로만 이러한 클래스에 추가됩니다.They were added to these classes solely to enable them to act as dynamic data sources for WPF. 이 요구를 충족시키기 위해 이러한 모든 동적 속성은 변경 알림을 구현합니다.To meet this need, all these dynamic properties implement change notifications. 이러한 동적 속성에 대한 자세한 참조 정보는 다음 섹션 LINQ to XML 동적 속성에서 제공됩니다.A detailed reference for these dynamic properties is provided in the next section, LINQ to XML Dynamic Properties.

참고

System.Xml.Linq 네임스페이스의 다양한 클래스에 있는 표준 public 속성 중 상당수를 일회성 데이터 바인딩에 사용할 수 있습니다.Many of the standard public properties, found in the various classes in the System.Xml.Linq namespace, can be used for one-time data binding. 그러나 이 체계에서 원본이나 대상은 동적으로 업데이트되지 않습니다.However, remember that neither the source nor the target will be dynamically updated under this scheme.

동적 속성 액세스Accessing Dynamic Properties

XAttributeXElement 클래스의 동적 속성에는 표준 속성의 경우처럼 액세스할 수 없습니다.The dynamic properties in the XAttribute and XElement classes cannot be accessed like standard properties. 예를 들어, C#과 같은 CLR 규격 언어에서 동적 속성에는 다음과 같은 특징이 있습니다.For example, in CLR-compliant languages such as C#, they cannot be:

  • 컴파일 타임에 직접 액세스할 수 없습니다.Accessed directly at compile time. 동적 속성은 컴파일러와 Visual Studio IntelliSense에 표시되지 않습니다.Dynamic properties are invisible to the compiler and to Visual Studio IntelliSense.

  • .NET 리플렉션을 사용하여 런타임에 검색하거나 액세스할 수 없습니다.Discovered or accessed at run time using .NET reflection. 런타임에도 동적 속성은 기본 CLR 의미에서 속성이 아닙니다.Even at run time, they are not properties in the basic CLR sense.

    C#에서는 System.ComponentModel 네임스페이스에서 제공하는 기능을 통해 런타임에만 동적 속성에 액세스할 수 있습니다.In C#, dynamic properties can only be accessed at run time through facilities provided by the System.ComponentModel namespace.

    그러나 XML 원본에서는 이와 대조적으로 다음과 같은 형태의 간단한 표기법을 통해 동적 속성에 액세스할 수 있습니다.In contrast, however, in an XML source dynamic properties can be accessed through a straightforward notation in the following form:

<object>.<dynamic-property>  

이러한 두 클래스의 동적 속성은 직접 사용할 수 있는 값이나 결과 값 또는 값 컬렉션을 얻기 위해 인덱스와 함께 제공되어야 하는 인덱서로 확인됩니다.The dynamic properties for these two classes either resolve to a value that can be used directly, or to an indexer that must be supplied with an index to obtain the resulting value or collection of values. 후자의 구문은 다음과 같습니다.The latter syntax takes the form:

<object>.<dynamic-property>[<index-value>]  

자세한 내용은 LINQ to XML 동적 속성을 참조하세요.For more information, see LINQ to XML Dynamic Properties.

WPF 동적 바인딩을 구현하기 위해 동적 속성은 System.Windows.Data 네임스페이스(무엇보다도 Binding 클래스)에서 제공하는 기능과 함께 사용됩니다To implement WPF dynamic binding, dynamic properties will be used with facilities provided by the System.Windows.Data namespace, most notably the Binding class.

참고 항목See Also

LINQ to XML로 WPF 데이터 바인딩 WPF Data Binding with LINQ to XML
LINQ to XML 동적 속성 LINQ to XML Dynamic Properties
WPF의 XAML XAML in WPF
데이터 바인딩(WPF) Data Binding (WPF)
워크플로 마크업 사용Using Workflow Markup