Frage

Ich habe ein Item dessen Itemssource an eine ObservableCollection<Component gebunden wird> zur Laufzeit. Ich habe eine Datenvorlage für Typ-Komponenten definiert, die gut funktioniert.

Jetzt hat Komponente eine ObservableCollection<Control> und ich möchte ein anderes Itemscontrol in meinem Component Datatemplate hinzufügen alle Kontrollen zu machen. Steuerung hier ist mein eigenes benutzerdefiniertes Objekt nicht im Zusammenhang mit einer WPF-Kontrolle.

Es gibt verschiedene Arten von Kontrollen, damit ich eine ItemTemplateSelector zu verwenden ist versucht, die richtige Vorlage für jeden Typen auszuwählen. Im Beispiel unten zu halten, klein Ich habe nur eine der Vorlagen „RWString“ gezeigt, die ich mit einem Findresource in MyControlTemplateSelector zwingende Select finden. Aber die Select wird nie (mit einem Breakpoint zu überprüfen) genannt. Gibt es etwas falsch in meinem 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>

Update: Contrls ist kein Tippfehler, seine mir nur ein dummes Benennungssystem verwendet wird. Contrls ist eine Eigenschaft der Komponente vom Typ ObservableCollection. Auch der Grund, warum ich das das ItemsTemplateSelector zu verwenden versuchen ist, dass die ObservableCollection<Control> enthält Objekte von generischen Typen wie Control<int> Control<string> etc alle von Control abgeleitet und scheinbar kippen Sie Datatemplates erstellen, um generische Typen beziehen.

Update3: Entfernte Update 2, wie es war in keinem Zusammenhang. Ich habe die ItemTemplateSelector indem Static zu Dynamic zu arbeiten. Aber ich weiß nicht, warum das funktioniert ...

War es hilfreich?

Lösung

Ich vermute, dies nicht mit einem Static funktioniert wie die Ressource innerhalb des Itemscontrol, das hat wahrscheinlich nicht zur Ladezeit erstellt worden, als StaticResources ausgewertet werden.

Dynamic zur Ladezeit auf einen Ausdruck zur Ladezeit ausgewertet wird und dann auf den richtigen Wert bewertet, wenn angefordert.

Versuchen Sie, die Ressource außerhalb des Items bewegen.

Andere Tipps

In der Zeile, wo Sie die verschachtelten Items binden, ist der Weg richtig? Es ist derzeit "Contrls", sollte es "Controls"?

sein
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top