Содержимое списка не заполняется содержимым из xml при использовании XmlDataProvider - PullRequest
1 голос
/ 18 марта 2011

У меня есть очень простой ресурс приложения, указанный как

 <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 как

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

        </ListBox> 

Но при запуске приложениявообще не заполняет список.Я не могу поверить, что я не смог заставить что-то столь простое, как это, работать ...

Ответы [ 2 ]

2 голосов
/ 18 марта 2011

попробуйте использовать <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, что могло бы перенаправить запросы. "

0 голосов
/ 18 марта 2011

Просьба проверить, сработают ли для вас указанные ниже изменения:

для поставщика данных добавлено пустое пространство имен в узел цветов:

<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}" />

надеюсь, это поможет, с уважением

...