将ItemsSource绑定到XML字符串

时间:2012-07-10 19:23:31

标签: wpf data-binding xmldataprovider

我有一个数据库存储过程调用,除了其他列之外,还返回一个包含XML格式数据的列。我试图在网格中显示此调用的结果(通过实体框架进行调用,因此绑定到网格的实际对象是POCO,并且所讨论的列是string属性)。 / p>

正常列显示正确时,我需要能够在该列中获取XML数据并将其内容(它将包含多个节点)绑定到单元格模板中的ItemsControl。 / p>

例如,假设我有一个显示以下对象集合的网格:

class Photo
{
    string PhotoId { get; set; }
    string Name { get; set; }
    string TagListXml { get; set; }
}

这用于表示照片,TagListXml属性包含一个XML字符串,其中列出了已应用于照片的所有标记。类似于......的东西。

<PhotoTags>
    <Tag>Faces</Tag>
    <Tag>People</Tag>
    <Tag>Sepia</Tag>
</PhotoTags>

(虽然很明显普通的POCO会有List<string>或类似的东西,但我现在假设我必须使用XML字符串)

在我的网格中,我希望能够指定使用此XML的ItemsControl,并最终为我提供项FacesPeopleSepia

我试过这个用于细胞模板:

<DataTemplate>
    <ItemsControl ItemsSource="{Binding TagListXml, 
                                Converter={StaticResource xmlConverter}}" />
</DataTemplate>

xmlConverter的定义如下:

<dc:StringToXmlConverter x:Key="xmlConverter" XPath="PhotoTags" />

dc:StringToXmlConverter是一个自定义IValueConverter,它只接受一个字符串值,实例化一个XmlDocument并加载该字符串,然后返回一个XmlDataProvider的新文档和上面指定的XPath

虽然这不会在“输出”窗口中以异常或绑定错误的形式产生任何错误,但它不会执行任何操作(没有显示结果)。

我认为这是因为XmlDataProvider无法直接设置为ItemsSource,而是必须设置为Source的{​​{1}}。 (换句话说,您必须Binding而不是ItemSource="{Binding Source={StaticResource xmlProvider}}")。

我似乎无法随心所欲,而且在过去的几个小时里我一直在努力。

如何将XML字符串绑定到ItemsSource="{StaticResource xmlProvider}"的{​​{1}}?

1 个答案:

答案 0 :(得分:1)

为什么不返回XmlNode[]而不是XmlDataProvider(主要是针对XAML)?