Wie können Sie die automatische DataTemplate-Auswahl basierend auf dem Datentyp aktivieren, wie Sie dies mit einem Elementsteuerelement tun können?

8

Wir schreiben eine sehr spezialisierte ItemsControl , die eigentlich drei ContentPresenter pro Zeile hat, die jeweils an ein anderes Objekt gebunden sind (denken Sie an das Raster des armen Mannes) anstatt an die häufigere, wie zB ListBox .

Jetzt mit einem ListBox , wenn Sie nicht explizit eine ItemTemplate oder eine ItemTemplateSelector angeben, scheint es einen internen Selektor zu geben, der die Vorlage nur auf der Basis des Datentyps anwendet. Aber unsere ContentPresenter holen sie nicht ab. Wir haben auch versucht, sie auf ContentControl zu setzen, aber das hat auch nicht funktioniert.

Jetzt weiß ich, dass ich einfach meine eigene DataTypeTemplateSelector schreiben kann, die das tut, aber ich frage mich, ob diese Funktionalität schon irgendwo "gebacken" ist, wie sie mit so vielen ItemsControl 's verwendet wird ( ListBox , TreeView , ComboBox ', DataGrid usw.) und entsprechend diesem MSDN Artikel ...

Ссылка

... es sollte standardmäßig funktionieren! Aber wieder nicht.

Hier ist unser (Pseudo-) Code ...

%Vor%

Also ... irgendjemand will einen Stich machen, warum nicht?

    
MarqueIV 27.09.2011, 19:15
quelle

1 Antwort

6

DataType , aus irgendeinem verrückten Grund , ist vom Typ Object , die DataTemplates haben daher ein string in dieser Eigenschaft festgelegt, es sei denn, Sie verwenden x:Type .

Bearbeiten: Es gibt einen sehr guten Grund dafür, dass die Eigenschaft ein Objekt ist, da immer diejenigen, die (und tun) lesen können, eindeutig im Vorteil sind:

  

Wenn die Vorlage für Objektdaten vorgesehen ist, enthält diese Eigenschaft den Typnamen des Datenobjekts (als Zeichenfolge). Verwenden Sie die x: Type Markup Extension, um auf den Typnamen der Klasse zu verweisen. Wenn die Vorlage für XML-Daten vorgesehen ist, enthält diese Eigenschaft den Namen des XML-Elements. Weitere Informationen zum Angeben eines nicht standardmäßigen Namespaces für das XML-Element finden Sie in den Anmerkungen zur Dokumentation.

    
H.B. 27.09.2011, 19:51
quelle