Wie verwendet man eine DataType-bezogene DataTemplate zusammen mit GridView?
Bevor Sie antworten: Diese Frage bezieht sich auf WPFsListView
Kontrolle (mitGridView
). Es istnicht über WPF'sDataGrid
Kontrolle, ASP.NETDataGrid
oderListView
Steuerelemente oder WinFormsDataGridView
oderListView
Kontrollen. Sie klingen alle sehr ähnlich und sind oft verwirrt, aber eine Antwort auf die falsche Art der Kontrolle ist für mich nicht hilfreich und vor allem eine Verschwendung der Zeit, die Sie zum Schreiben der Antwort benötigt haben, die meines Erachtens nicht verschwendet werden sollte.
Ich habe einListView
steuern mitGridView
Das hat mehrere Spalten, die an die Eigenschaften meines Ansichtsmodells gebunden sind. Ich kann das visuelle Erscheinungsbild des leicht anpassenGridViewColumn
Zellen durch Angabe einesCellTemplate
(entweder inline oder über eine Ressource).
Jetzt habe ich eine bestimmte Eigenschaft in meinem Ansichtsmodell; sein Typ ist eine abstrakte Basisklasse und sein Wert kann einer von mehreren abgeleiteten Typen sein. Jeder abgeleitete Typ sollte einen anderen habenDataTemplate
in der Zelle. Glücklicherweise,GridViewColumn
hat einCellTemplateSelector
Das macht genau das, was ich will, aber es muss etwas Installationscode geschrieben werden. Aber auf der Seite nachDataTemplateSelector
es sagt:
Beachten Sie, dass Sie bei Objekten unterschiedlichen Typs die DataType-Eigenschaft in der DataTemplate festlegen können. In diesem Fall muss kein DataTemplateSelector erstellt werden. [...] Weitere Informationen finden Sie unterÜbersicht über Datenvorlagen.
Hurra! Sie müssen keinen Installationscode schreiben. Meine Typensind anders, so scheint dies wie eine perfekte Passform. Aber leider, auch nachdem ich aDataTemplate
mit einerDataType
das einem bestimmten abgeleiteten Typ einer der datengebundenen Spalten entspricht (gebunden mitGridViewColumn
'sDisplayMemberBinding
) hatte es keine Wirkung.
Ich möchte einfach eine andere anzeigenDataTemplate
nach dem Laufzeit-Typ einer bestimmten Spalte in meinerGridView
. SindDataType
-gezieltDataTemplates
einfach unvereinbar mitGridView
? Gibt es eine Möglichkeit, sie zu verwenden, oder muss ich auf die Angabe von a zurückgreifen?CellTemplateSelector
? Vielleicht gibt es eine Möglichkeit, mehrere anzugebenDataTemplate
s drinnenGridViewColumn
'sCellTemplate
, so, dass dieDataType
Eigentum wird eine Wirkung haben?