質問

ItemsControlがあり、そのItemsSourceはObservableCollection < Component <!> gt;にバインドされます。実行時に。正常に機能するコンポーネントタイプのデータテンプレートを定義しました。

NowコンポーネントにはObservableCollection <=> Control <!> gt;があります。そして、コンポーネントデータテンプレート内に別のItemsControlを追加して、すべてのコントロールをレンダリングします。ここでのコントロールは、wpfコントロールに関連しない独自のカスタムオブジェクトです。

コントロールにはさまざまなタイプがあるため、ItemTemplateSelectorを使用して各タイプに適したテンプレートを選択しようとしています。以下の例では、サイズを小さくするために、テンプレート<!> quot; RWString <!> quotの1つのみを示しています。 SelectControlをオーバーライドするMyControlTemplateSelectorのFindResourceを使用して検索します。ただし、SelectTemplateは呼び出されません(チェックするブレークポイントを使用)。 xamlに何か問題がありますか?

<ItemsControl.Resources>
    <src:MyControlTemplateSelector x:Key="XSelector" />
    <DataTemplate DataType="{x:Type src:Component}"  >
        <Expander Visibility="{Binding Path=Show}">
                <ItemsControl ItemsSource="{Binding Path=Contrls}" 
                          ItemTemplateSelector="{StaticResource XSelector}">
                <ItemsControl.Resources>
                    <DataTemplate x:Key="RWstring" >
                        <TextBlock Text="{Binding Path=Label}"/>
                    </DataTemplate>
                </ItemsControl.Resources>
                <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate><WrapPanel /></ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
            </ItemsControl>
        </Expander>
    </DataTemplate>
</ItemsControl.Resources>

更新: Contrlsはタイプミスではなく、馬鹿げたネーミングシステムを使用している私だけです。 Contrlsは、ObservableCollection型のコンポーネントのプロパティです。また、ItemsTemplateSelectorを使用しようとしている理由は、ObservableCollection <=> Control <!> gt; Control <=> int <!> gt;のような汎用タイプのオブジェクトが含まれます。 Control <=> string <!> gt;などはすべてControlから派生しており、どうやらジェネリック型を参照するデータテンプレートを作成できないようです。

Update3:更新2は無関係であるため削除しました。 StaticResourceをDynamicResourceに変更することで、ItemTemplateSelectorが機能するようになりました。しかし、なぜこれが機能するのかわかりません...

役に立ちましたか?

解決

静的リソースが評価されるロード時に作成されていない可能性があるリソースがItemsControl内にあるため、これはStaticResourceでは機能しないと推測しています。

ロード時にDynamicResourcesはロード時に式に評価され、要求されたときに正しい値に評価されます。

ItemsControlの外にリソースを移動してみてください。

他のヒント

ネストされたItemsControlをバインドする行で、パスは正しいですか?現在は<!> quot; Contrls <!> quot;です。<!> quot; Controls <!> quot;?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top