如何将带有名称空间的XML绑定到WPF DataGrid?

如何将带有名称空间的XML绑定到WPF DataGrid?,wpf,linq-to-xml,wpfdatagrid,xml-binding,Wpf,Linq To Xml,Wpfdatagrid,Xml Binding,我有一个用例,需要将XML文件中的数据绑定到WPF数据网格。我准备了这个示例来演示我将在最终代码中做什么 这是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&g

我有一个用例,需要将XML文件中的数据绑定到WPF数据网格。我准备了这个示例来演示我将在最终代码中做什么

这是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>
现在,如果我在Books.XML的根元素处定义了一个XML名称空间,那么它就是
http://my.namespace.com/books
;我知道我可以通过编程方式获得该名称空间,如下所示:


XNamespace myNameSpace = XElement.Load(_xmlFilePath).Attribute("xmlns").Value;
但是,如何在XAML中检索这个名称空间以访问“book”元素?这方面的最佳做法是什么


非常感谢。

如果我误解了你的意思,很抱歉,但是

  • 如果需要从默认名称空间访问元素,如xmlns=“…”,则应使用常规语法,如Path=Attribute[name].Value

  • 如果您有带前缀的名称空间的XML,如xmlns:ns=“…”,并且该名称空间内的元素如,则可以尝试使用Path=elements[“ns:book”]


希望这能有所帮助。

这会有所帮助,但XAML不接受这样引用的“ns:book”。删除引号会引发异常。我也根据你的想法玩了一段时间,但没有运气。谢谢你,如果你还有什么想法,请与我分享。非常感谢你的帮助。

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

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