我有一个数据库存储过程调用,除了其他列之外,还返回一个包含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
,并最终为我提供项Faces
,People
和Sepia
。
我试过这个用于细胞模板:
<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}}?
答案 0 :(得分:1)
为什么不返回XmlNode[]
而不是XmlDataProvider
(主要是针对XAML)?