방법: XDocument, XElement 또는 LINQ for XML 쿼리 결과에 바인딩
업데이트: 2008년 7월
이 예제에서는 XDocument를 사용하여 XML 데이터를 ItemsControl에 바인딩하는 방법을 설명합니다.
예제
다음 XAML 코드에서는 ItemsControl을 정의하고 Planet 데이터 형식의 데이터 템플릿을 http://planetsNS XML 네임스페이스에 포함합니다. 네임스페이스를 사용하는 XML 데이터 형식에는 중괄호로 묶은 네임스페이스가 포함되어야 하며, XAML 태그 확장이 나타나는 위치에 네임스페이스를 사용하는 경우에는 네임스페이스 앞에 중괄호 이스케이프 시퀀스를 추가해야 합니다. 이 코드는 XElement 클래스의 Element 및 Attribute 메서드에 해당하는 동적 속성에 바인딩됩니다. 동적 속성을 사용하면 XAML을 메서드 이름을 공유하는 동적 속성에 바인딩할 수 있습니다. 자세한 내용은 LINQ to XML 동적 속성을 참조하십시오. XML에 대한 기본 네임스페이스 선언은 특성 이름에 적용되지 않습니다.
<StackPanel Name="stacky">
<StackPanel.Resources>
<DataTemplate DataType="{}{http://planetsNS}Planet" >
<StackPanel Orientation="Horizontal">
<TextBlock Width="100" Text="{Binding Path=Element[{http://planetsNS}DiameterKM].Value}" />
<TextBlock Width="100" Text="{Binding Path=Attribute[Name].Value}" />
<TextBlock Text="{Binding Path=Element[{http://planetsNS}Details].Value}" />
</StackPanel>
</DataTemplate>
</StackPanel.Resources>
...
<ItemsControl
ItemsSource="{Binding }" >
</ItemsControl>
</StackPanel>
다음 C# 코드에서는 Load를 호출하고 http://planetsNS XML 네임스페이스에서 SolarSystemPlanets이라는 요소의 모든 하위 요소에 대한 스택 패널 데이터 컨텍스트를 설정합니다.
planetsDoc = XDocument.Load("../../Planets.xml");
stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements();
XML 데이터는 ObjectDataProvider를 사용하여 XAML 리소스로 저장할 수 있습니다. 전체 예제는 L2DBForm.xaml 소스 코드를 참조하십시오. 다음 샘플에서는 코드에서 데이터 컨텍스트를 개체 리소스로 설정하는 방법을 보여 줍니다.
planetsDoc = (XDocument)((ObjectDataProvider)Resources["justTwoPlanets"]).Data;
stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements();
Element 및 Attribute에 매핑되는 동적 속성에서는 XAML 내에서의 유연성을 제공합니다. 또한 코드를 LINQ for XML 쿼리 결과에 바인딩할 수도 있습니다. 이 예제에서는 요소 값별로 정렬된 쿼리 결과에 바인딩됩니다.
stacky.DataContext =
from c in planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements()
orderby Int32.Parse(c.Element("{http://planetsNS}DiameterKM").Value)
select c;
참고 항목
작업
개념
LINQ to XML을 사용한 WPF 데이터 바인딩 개요
LINQ to XML을 사용한 WPF 데이터 바인딩 예제
변경 기록
날짜 |
변경 내용 |
이유 |
---|---|---|
2008년 7월 |
항목이 추가되었습니다. |
향상된 기능 관련 정보 |