使用XmlDataProvider时,列表框内容未使用xml中的内容填充

时间:2011-03-18 16:44:36

标签: wpf listbox xmldataprovider

我有一个非常简单的应用程序资源,指定为

 <Application.Resources>
        <XmlDataProvider x:Key="MoreColors" XPath="/colors">
            <x:XData>
                <colors>
                    <color name="pink"/>
                    <color name="white"/>
                    <color name="black"/>
                    <color name="cyan"/>
                    <color name="gray"/>
                    <color name="magenta"/>
                </colors>
            </x:XData>
        </XmlDataProvider>
    </Application.Resources>

然后一个窗口尝试使用xml中的元素填充listview作为

<ListBox x:Name="lbColor" 
                 IsSynchronizedWithCurrentItem="True"
                 Width="248" Height="56"
                 ItemsSource="{Binding Source={StaticResource MoreColors}, XPath=color/@name}">

        </ListBox> 

但是在运行时,应用程序根本不会填充Listview。我无法相信我没有能够得到像这样简单的工作......

2 个答案:

答案 0 :(得分:2)

尝试在应用资源中使用<colors xmlns="">代替<colors>

http://msdn.microsoft.com/en-us/library/system.windows.data.xmldataprovider.aspx说 “XML数据的根节点具有xmlns属性,该属性将XML名称空间设置为空字符串。这是将XPath查询应用于XAML页面内联的数据岛的要求。在此内联案例中,XAML,因此数据岛继承了System.Windows命名空间。因此,您需要将命名空间设置为空,以防止XPath查询被System.Windows命名空间限定,这会误导查询。“

答案 1 :(得分:0)

请检查以下更改是否对您有用:

为数据提供程序添加了一个空名称空间到colors节点:

<XmlDataProvider x:Key="MoreColors" XPath="/colors">
    <x:XData>
        <colors xmlns="">
            <color name="pink"/>
            <color name="white"/>
            <color name="black"/>
            <color name="cyan"/>
            <color name="gray"/>
            <color name="magenta"/>
        </colors>
    </x:XData>
</XmlDataProvider>

列表框稍微改变了xpath查询:

<ListBox ItemsSource="{Binding Source={StaticResource MoreColors}, XPath=//color/@name}" />

希望这有帮助,尊重