2010-04-16 50 views
1

对不起,我刚开始使用wpf编程。我似乎无法弄清楚为什么下面的xaml显示“System.Xml.XmlElement”,而不是实际的XML节点内容。每当我运行它时,它会在列表框中显示5次。不知道我要去哪里错...XmlDataProvider转换器问题

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

任何帮助将非常感激。谢谢!

回答

0

Your ItemsSource Binding正在返回'name'元素的集合。这些是XmlElement类型。这样做是因为它允许绑定获取XmlElement的其他属性,但意味着如果您以文本方式显示绑定的结果,那么您得到System.Xml.XmlElement而不是文本内容。

要获得的文本内容,添加一个额外的XPath您的ItemTemplate绑定到指定的TextBlock.Text属性应该特异性结合的元素,而不是元素对象本身的文本:

<DataTemplate x:Key="shmooga"> 
    <TextBlock Text="{Binding XPath=text()}"/> <!-- Note XPath on Binding --> 
</DataTemplate> 
+0

这是伟大的!谢谢!我真的很难过这个。 – Andrew 2010-04-16 23:46:28