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?
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.
Tags und Links wpf datatemplate contentpresenter datatemplateselector contentcontrol