1

我有一个数据库存储过程调用,除其他列外,它返回一个包含 XML 格式数据的列。我正在尝试在网格中显示此调用的结果(调用是通过实体框架进行的,因此绑定到网格的实际对象是 POCO,有问题的列是string属性)。

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

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

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 字符串)

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

我已经为单元格模板尝试过这个:

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

wherexmlConverter是这样定义的:

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

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

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

我相信这是因为 anXmlDataProvider不能ItemsSource直接设置为 a ,而是必须设置为Sourcea Binding。(换句话说,你必须做ItemSource="{Binding Source={StaticResource xmlProvider}}"而不是ItemsSource="{StaticResource xmlProvider}")。

我似乎无能为力,在过去的几个小时里,我一直在努力解决这个问题。

如何将 XML 字符串绑定ItemsSourceItemsControl?

4

1 回答 1

1

为什么不返回 aXmlNode[]而不是 a XmlDataProvider(这主要用于 XAML)?

于 2012-07-10T19:27:11.353 回答