Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何绑定到源设置了默认名称空间(xmlns)的XmlDataProvider?_C#_Wpf_Xml_Xaml_Xpath - Fatal编程技术网

C# 如何绑定到源设置了默认名称空间(xmlns)的XmlDataProvider?

C# 如何绑定到源设置了默认名称空间(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

<?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
,它似乎不适用于名称空间,打开的后续问题