2010-06-23 3 views
0

XML 파일의 데이터를 WPF DataGrid에 바인딩해야하는 유스 케이스가 있습니다. 필자는 최종 코드에서 내가 무엇을 할 것인지를 보여주기 위해이 예제를 준비했다. XML을 네임 스페이스로 WPF DataGrid에 바인딩하는 방법?

는 Books.xml을 수 있습니다 :

 

<?xml version="1.0" encoding="utf-8" ?> 
<library> 
    <books> 
    <book id="1" name="The First Book" author="First Author"> 
    First Book Content 
    </book> 
    <book id="2" name="The Second Book" author="Second Author"> 
    Second Book Content 
    </book> 
    </books> 
</library> 
 

을 그리고 여기에 내가 내 데이터 그리드 컨트롤을 바인딩하는 방법이다. 먼저 XAML : 다음

 

<Window x:Class="LinqToXmlBinding.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit" 
Title="Window1" Height="300" Width="400"> 
<Grid> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width="268*" /> 
    <ColumnDefinition Width="110*" /> 
    </Grid.ColumnDefinitions> 
    <toolkit:DataGrid Name="xmlBoundDataGrid" Margin="1" ItemsSource="{Binding Path=Elements[book]}"> 
    <toolkit:DataGrid.Columns> 
    <toolkit:DataGridTextColumn Header="Book ID" Binding="{Binding Path=Attribute[id].Value}"/> 
    <toolkit:DataGridTextColumn Header="Book Name" Binding="{Binding Path=Attribute[name].Value}"/> 
    <toolkit:DataGridTextColumn Header="Content" Binding="{Binding Path=Value}"/> 
    </toolkit:DataGrid.Columns> 
    </toolkit:DataGrid> 
    <StackPanel Name="myStackPanel" Grid.Column="1"> 
    <Button Name="bindToXmlButton" Click="bindToXmlButton_Click">Bind To XML</Button> 
    </StackPanel> 
</Grid> 
</Window> 
 

, C# 코드 : 이제

 

const string _xmlFilePath = "..//..//Books.xml"; 
private void bindToXmlButton_Click(object sender, RoutedEventArgs e) 
{ 
    XElement books = XElement.Load(_xmlFilePath).Element(myNameSpace + "books"); 
    xmlBoundDataGrid.DataContext = books; 
} 
 

, 내가 http://my.namespace.com/books로의 Books.xml의 루트 요소에서 XML 네임 스페이스를 정의하는 경우; 나는과 같이 프로그래밍 네임 스페이스를 얻을 수 있습니다 알고

 

XNamespace myNameSpace = XElement.Load(_xmlFilePath).Attribute("xmlns").Value; 
 

하지만, 어떻게 내가 "책"요소에 액세스하기 위해 XAML에서이 네임 스페이스를 검색 할 수 있습니다? 그리고 그 점에서 가장 좋은 관행은 무엇입니까?

대단히 감사합니다.

답변

0

난 당신이 잘못 가지고 있다면 미안하지만,

  • 당신의 xmlns = 같은 기본 네임 스페이스의 요소에 액세스해야하는 경우

    "...", 당신은 경로 = 속성 [이름]과 같은 일반 구문을 사용합니다. 당신의 xmlns와 같은 접두사와 네임 스페이스와 XML이있는 경우 값

  • :

  • : NS = "..."이 네임 스페이스와 같은 내부 요소를, 당신은 경로 = 요소를 [ "책 NS"]를 사용하려고 할 수 있습니다

희망 lps.

+0

그게 도움이 되겠지만 XAML은 "ns : book"을 따옴표로 받아들이지 않습니다. 따옴표를 제거하면 예외가 발생합니다. 나는 또한 당신의 생각을 바탕으로 약간의 주위 것들과 함께 놀았지만 운이 없습니다. 감사합니다. 더 이상 생각이 없으면 나와 공유하십시오. – mbadawi23

+0

이 기사가 보이십니까? http://msdn.microsoft.com/en-us/library/cc165615.aspx – STO

+0

도움 주셔서 대단히 감사합니다. – mbadawi23

관련 문제