2010-06-23 61 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> 
 

這裏是我如何將它綁定我DataGrid控件。第一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; 
} 
 

現在,如果我在Books.xml的根元素定義的XML命名空間是http://my.namespace.com/books;我知道我可以得到該命名空間編程就像這樣:

 

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

但是,我怎麼能以訪問「書」元素檢索該命名空間中的XAML?這方面的最佳做法是什麼?

非常感謝。

回答

0

很抱歉,如果我把你錯了,但

  • 如果您需要訪問從喜歡的xmlns =默認命名空間的元素「...」,你應該使用常規的語法像路徑=屬性[名]。值

  • 如果你有一個命名空間的前綴,像XMLNS XML:NS =「...」和這個命名空間內等元素,你可以嘗試使用路徑=元素[‘NS:書’]

希望這個他LPS。

+0

這將有所幫助,但XAML不接受「ns:book」這樣的引用。刪除引號會引發異常。根據你的想法,我也玩過一些東西,但沒有運氣。 謝謝,如果您有更多想法,請與我分享。 – mbadawi23 2010-06-23 22:58:28

+0

您是否看到這篇文章? http://msdn.microsoft.com/en-us/library/cc165615.aspx – STO 2010-06-24 08:41:43

+0

非常感謝您的幫助。 – mbadawi23 2010-06-25 14:14:11