다음을 통해 공유


방법: XDocument, XElement 또는 LINQ for XML 쿼리 결과에 바인딩

이 예제에서는 XDocument를 사용하여 XML 데이터를 ItemsControl에 바인딩하는 방법을 설명합니다.

예제

다음 XAML 코드에서는 ItemsControl을 정의하고 Planet 데이터 형식의 데이터 템플릿을 http://planetsNS XML 네임스페이스에 포함합니다. 네임스페이스를 사용하는 XML 데이터 형식에는 중괄호로 묶은 네임스페이스가 포함되어야 하며, XAML 태그 확장이 나타나는 위치에 네임스페이스를 사용하는 경우에는 네임스페이스 앞에 중괄호 이스케이프 시퀀스를 추가해야 합니다. 이 코드는 XElement 클래스의 ElementAttribute 메서드에 해당하는 동적 속성에 바인딩됩니다. 동적 속성을 사용하면 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()
planetsDoc = XDocument.Load("../../Planets.xml");
stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements();

XML 데이터는 ObjectDataProvider를 사용하여 XAML 리소스로 저장할 수 있습니다. 전체 예제는 L2DBForm.xaml 소스 코드를 참조하십시오. 다음 샘플에서는 코드에서 데이터 컨텍스트를 개체 리소스로 설정하는 방법을 보여 줍니다.

            planetsDoc = CType((CType(Resources("justTwoPlanets"), ObjectDataProvider)).Data, XDocument)
            stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements()
planetsDoc = (XDocument)((ObjectDataProvider)Resources["justTwoPlanets"]).Data;
stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements();

ElementAttribute에 매핑되는 동적 속성에서는 XAML 내에서의 유연성을 제공합니다. 또한 코드를 LINQ for XML 쿼리 결과에 바인딩할 수도 있습니다. 이 예제에서는 요소 값별로 정렬된 쿼리 결과에 바인딩됩니다.

            stacky.DataContext = From c In planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements()
                                 Order By Int32.Parse(c.Element("{http://planetsNS}DiameterKM").Value)
                                 Select c
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 데이터 바인딩 예제

LINQ to XML 동적 속성