他の列の中でも特に、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
カスタムです。IValueConverter
XmlDocument
XmlDataProvider
XPath
これにより、例外または [出力] ウィンドウのバインド エラーの形式でエラーが発生することはありませんが、何も実行されません(結果は表示されません)。
これは、 anを に直接XmlDataProvider
設定することはできず、 a のとして設定する必要があるためだと思います。(つまり、ではなく、実行する必要があります)。ItemsSource
Source
Binding
ItemSource="{Binding Source={StaticResource xmlProvider}}"
ItemsSource="{StaticResource xmlProvider}"
私はそれでどこにも行けないようで、ここ数時間これに頭を悩ませてきました.
ItemsSource
XML 文字列を のにバインドするにはどうすればよいItemsControl
ですか?