C# 如何绑定到源设置了默认名称空间(xmlns)的XmlDataProvider?
我有如下类似的XMLC# 如何绑定到源设置了默认名称空间(xmlns)的XmlDataProvider?,c#,wpf,xml,xaml,xpath,C#,Wpf,Xml,Xaml,Xpath,我有如下类似的XML <?xml version="1.0" encoding="utf-8"?> <foo name="FooBar" xmlns="http://mydomain/myapp/ver/myschema.xsd"> <bars v="test"> <bar bat="one"/> <bar bat="two"/> <bar bat="three"/>
<?xml version="1.0" encoding="utf-8"?>
<foo name="FooBar" xmlns="http://mydomain/myapp/ver/myschema.xsd">
<bars v="test">
<bar bat="one"/>
<bar bat="two"/>
<bar bat="three"/>
</bars>
</foo>
我正在通过以下代码分配XmlDataProvider.Source
属性
XmlDataProvider xdp = FindResource("mySource1") as XmlDataProvider;
// ... setup dialog and confirm resource.
using (Stream s = dlg.OpenFile()) {
XmlDocument doc = new XmlDocument();
doc.Load(s);
xdp.Document = doc;
}
如果您能帮助解决此问题,我们将不胜感激,谢谢
更新
根据安德鲁斯的建议,我得出以下结论:
<Window.Resources>
<XmlDataProvider x:Key="mySource"
XPath="/fb:foo">
<XmlDataProvider.XmlNamespaceManager>
<XmlNamespaceMappingCollection>
<XmlNamespaceMapping
Uri="http://mydomain/myapp/ver/myschema.xsd"
Prefix="fb"/>
</XmlNamespaceMappingCollection>
</XmlDataProvider.XmlNamespaceManager>
</XmlDataProvider>
</Window.Resources>
<StackPanel DataContext="{StaticResource mySource}">
<Label Content="{Binding XPath=@name}"/>
<ComboBox ItemsSource="{Binding XPath=fb:bars/fb:bar}"
IsSynchronizedWithCurrentItem="True">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding XPath=@bat}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
你能试试这个吗?我不太熟悉xml名称空间
<Window.Resources>
<!-- also tried -->
<XmlDataProvider x:Key="mySource3"
XPath="/cs:foo">
<XmlDataProvider.XmlNamespaceManager>
<XmlNamespaceMappingCollection>
<XmlNamespaceMapping
Uri="http://mydomain/myapp/ver/myschema.xsd"
Prefix="cs"/>
</XmlNamespaceMappingCollection>
</XmlDataProvider.XmlNamespaceManager>
</XmlDataProvider>
</Window.Resources>
<StackPanel DataContext="{StaticResource mySource1}">
<Label Content="{Binding XPath=@name}"/>
<Label Content="{Binding XPath=cs:bat}"/>
</StackPanel>
你能试试这个吗?我不太熟悉xml名称空间
<Window.Resources>
<!-- also tried -->
<XmlDataProvider x:Key="mySource3"
XPath="/cs:foo">
<XmlDataProvider.XmlNamespaceManager>
<XmlNamespaceMappingCollection>
<XmlNamespaceMapping
Uri="http://mydomain/myapp/ver/myschema.xsd"
Prefix="cs"/>
</XmlNamespaceMappingCollection>
</XmlDataProvider.XmlNamespaceManager>
</XmlDataProvider>
</Window.Resources>
<StackPanel DataContext="{StaticResource mySource1}">
<Label Content="{Binding XPath=@name}"/>
<Label Content="{Binding XPath=cs:bat}"/>
</StackPanel>
Hi Andrew,这为我指明了正确的方向,但是映射嵌套元素仍然有问题,我已经更新了我的问题,如上所示。我还更新了XML以反映这个问题。另一方面,我真的不想在我的XAML中的任何地方都指定前缀,我不想这样做。我尝试了你编辑的代码,它似乎没有绑定错误。我可以看到一个标签“fooBar”和一个带有“一、二、三”的组合框。我不确定是否有办法删除前缀。我以前从未见过它在xaml中被删除。正如您所发现的,它确实有效,但我不确定在我的实际问题中到底出了什么问题。在没有名称空间的情况下,它的行为与预期一样,因此发生了一些奇怪的事情。我一定是在某个地方漏掉了一个prfix而没有注意到。感谢您的帮助Andrew。嗨,Andrew,找到了我一直遇到的问题的根本原因,似乎绑定到组合框的SelectedItem
会带来麻烦。嗨,Andrew,这为我指明了正确的方向,但是映射嵌套元素仍然有问题,我已经更新了我的问题,如上所示。我还更新了XML以反映这个问题。另一方面,我真的不想在我的XAML中的任何地方都指定前缀,我不想这样做。我尝试了你编辑的代码,它似乎没有绑定错误。我可以看到一个标签“fooBar”和一个带有“一、二、三”的组合框。我不确定是否有办法删除前缀。我以前从未见过它在xaml中被删除。正如您所发现的,它确实有效,但我不确定在我的实际问题中到底出了什么问题。在没有名称空间的情况下,它的行为与预期一样,因此发生了一些奇怪的事情。我一定是在某个地方漏掉了一个prfix而没有注意到。感谢您的帮助Andrew。嗨,Andrew,找到了我一直遇到的问题的根本原因,似乎绑定到组合框的SelectedItem
会带来麻烦。我发现这个问题源于这样一个事实,即我的实际问题是绑定到组合框的SelectedItem
,它似乎不适用于名称空间,打开的后续问题我发现问题源于这样一个事实,即我的实际问题绑定到组合框的SelectedItem
,它似乎不适用于名称空间,打开的后续问题