Проблема конвертера с XmlDataProvider - PullRequest
1 голос
/ 16 апреля 2010

Извините за это, я только начал программировать с wpf. Я не могу понять, почему следующий xaml отображает «System.Xml.XmlElement» вместо фактического содержимого узла xml. Это отображается 5 раз в списке каждый раз, когда я запускаю его. Не уверен, где я иду не так ...

<Window x:Class="TestBinding.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <XmlDataProvider x:Key="myXmlSource" XPath="/root">
            <x:XData>
                <root xmlns="">
                    <name>Steve</name>
                    <name>Arthur</name>
                    <name>Sidney</name>
                    <name>Billy</name>
                    <name>Steven</name>
                </root>
            </x:XData>
        </XmlDataProvider>
        <DataTemplate x:Key="shmooga">
            <TextBlock Text="{Binding}"/>
        </DataTemplate>
    </Window.Resources>
    <Grid>
        <ListBox ItemTemplate="{StaticResource shmooga}"
                 ItemsSource="{Binding Source={StaticResource myXmlSource}, XPath=name}">
        </ListBox>
    </Grid>
</Window>

Любая помощь будет принята с благодарностью. Спасибо!

1 Ответ

0 голосов
/ 17 апреля 2010

Ваша привязка ItemsSource возвращает коллекцию элементов name. Они имеют тип XmlElement. Это сделано потому, что это позволяет привязкам получать другие свойства XmlElement, но означает, что если вы отобразите результат привязки в текстовом виде, вы получите System.Xml.XmlElement, а не текстовое содержимое.

Чтобы получить текстовое содержимое, добавьте дополнительный XPath к привязке ItemTemplate, чтобы указать, что свойство TextBlock.Text должно привязываться конкретно к тексту элемента, а не к самому объекту элемента:

<DataTemplate x:Key="shmooga">
  <TextBlock Text="{Binding XPath=text()}"/>  <!-- Note XPath on Binding -->
</DataTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...