1

TemplateSelectorsType に基づいてテンプレートを区別することをよく使用TemplateSelectorするため、型/テンプレートの関係を保持するプロパティを持つ を記述しようとしました。

x:ArrayXAMLでこのプロパティを設定するために使用しようとしました。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' でエラーが発生しました。

私のエラーがどこにあるのかヒントはありますか?

4

1 に答える 1

1

なぜあなたはあなたの人生をそんなに難しくしているのですか?つまり、優れたプログラマーになる方法は他にもたくさんあります。ただの冗談です。

単純に 2 つの s を記述し、次のよう"DataTemplate"にそれらに基づいてフィルター処理することができます。"DataType"

<Window.Resources>

    <DataTemplate DataType="x:Type logic:AddressedRegisterInformation" ></DataTemplate>

    <DataTemplate DataType="x:Type logic:NamedRegisterInformation" ></DataTemplate>

</Window.Resources>
<ListBox ItemsSource="{Binding}" />

なぜあなたはこれをしないのですか?"TemplateSelector"あなたが言及したような多くの問題を引き起こす可能性のある複雑なカスタムを使用しようとする代わりに. このように、WPF はすべての選択処理を実行し、座って の配列を にバインドし"Object"ます"ItemsSource"

それが役に立てば幸い

于 2012-11-26T17:03:44.840 に答える