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에서이 네임 스페이스를 검색 할 수 있습니다? 그리고 그 점에서 가장 좋은 관행은 무엇입니까?
대단히 감사합니다.
그게 도움이 되겠지만 XAML은 "ns : book"을 따옴표로 받아들이지 않습니다. 따옴표를 제거하면 예외가 발생합니다. 나는 또한 당신의 생각을 바탕으로 약간의 주위 것들과 함께 놀았지만 운이 없습니다. 감사합니다. 더 이상 생각이 없으면 나와 공유하십시오. – mbadawi23
이 기사가 보이십니까? http://msdn.microsoft.com/en-us/library/cc165615.aspx – STO
도움 주셔서 대단히 감사합니다. – mbadawi23