TemplateSelectors
Type に基づいてテンプレートを区別することをよく使用TemplateSelector
するため、型/テンプレートの関係を保持するプロパティを持つ を記述しようとしました。
x:Array
XAMLでこのプロパティを設定するために使用しようとしました。VS はx:Array
を実装するクラスではないと文句を言うため、これは機能しませIEnumerable
ん。
MSDN:
ただし、x:Array は、XAML を使用して、構造化されたプロパティ コンテンツとして一般的なコレクション サポート インターフェイスまたはクラスを取得する特定のプロパティ (たとえば、IEnumerable) を設定する場合にも役立ちます。
ここに対応するコード行
テンプレートセレクター
public class TypeMatchDataTemplateSelector : DataTemplateSelector
{
public TypeTemplate[] Templates { get; set; }
...
}
public class TypeTemplate
{
public Type Type { get; set; }
public DataTemplate Template { get; set; }
}
XAML での使用
<x:Array Type="ct:TypeTemplate" x:Key="fooTemplates">
<ct:TypeTemplate
Type="{x:Type logic:NamedRegisterInformation}"
Template="{StaticResource RegisterListTemplate}" />
<ct:TypeTemplate
Type="{x:Type logic:AddressedRegisterInformation}"
Template="{StaticResource RegisterListTemplate}" />
</x:Array>
<ct:TypeMatchDataTemplateSelector
x:Key="foo"
Templates="{StaticResource fooTemplates}"/>
...
...
<ListBox ItemTemplate="{StaticResource blub}">
使用されているタイプとテンプレートは正しいはずです。コードを実行すると、実行時にこの例外が発生します。
属性 'Templates' の値をタイプ 'EP3_gui.UI.ContentTemplates.TypeTemplate[]' のオブジェクトに変換できません。タイプ 'System.Windows.Markup.ArrayExtension' のオブジェクトはタイプ 'EP3_gui.UI.ContentTemplates.TypeTemplate[]' に変換できません。マークアップ ファイル 'EP3_gui;component/ui/readmsfrcontrol.xaml' の行 36 位置 11 のオブジェクト 'blub' でエラーが発生しました。
私のエラーがどこにあるのかヒントはありますか?