1

他の列の中でも特に、XML 形式のデータを含む列を返すデータベース ストアド プロシージャ呼び出しがあります。この呼び出しの結果をグリッドに表示しようとしています (呼び出しは Entity Framework を介して行われるため、グリッドにバインドされている実際のオブジェクトは POCO であり、問​​題の列はstringプロパティです)。

ItemsControl通常の列は正しく表示されますが、その 1 つの列の XML データを取得し、その内容 (複数のノードを含む) をセルのテンプレート内にバインドできるようにする必要があります。

たとえば、次のオブジェクトのコレクションを表示するグリッドがあるとします。

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 を使用する を指定できるようにしたいFacesと考えPeopleていますSepia

セルテンプレートでこれを試しました:

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

は次xmlConverterのように定義されています。

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

Andは、文字列値を取得し、 をインスタンス化して文字列をロードし、その新しいドキュメントと上記で指定された を返すdc:StringToXmlConverterカスタムです。IValueConverterXmlDocumentXmlDataProviderXPath

これにより、例外または [出力] ウィンドウのバインド エラーの形式でエラーが発生することはありませんが、何も実行されません(結果は表示されません)。

これは、 anを に直接XmlDataProvider設定することはできず、 a のとして設定する必要があるためだと思います。(つまり、ではなく、実行する必要があります)。ItemsSourceSourceBindingItemSource="{Binding Source={StaticResource xmlProvider}}"ItemsSource="{StaticResource xmlProvider}"

私はそれでどこにも行けないようで、ここ数時間これに頭を悩ませてきました.

ItemsSourceXML 文字列を のにバインドするにはどうすればよいItemsControlですか?

4

1 に答える 1

1

XmlNode[]a の代わりに a を返さないのはなぜですかXmlDataProvider(これは主に XAML 用です)。

于 2012-07-10T19:27:11.353 に答える