Was ist der Unterschied zwischen a ControlTemplate
und a DataTemplate
in WPF?
quelle
Was ist der Unterschied zwischen a ControlTemplate
und a DataTemplate
in WPF?
In der Regel wird ein Steuerelement für sich selbst gerendert und spiegelt nicht die zugrunde liegenden Daten wider. Zum Beispiel Button
wäre a nicht an ein Geschäftsobjekt gebunden - es ist nur da, damit es angeklickt werden kann. Ein ContentControl
oder ListBox
wird jedoch im Allgemeinen angezeigt, damit sie dem Benutzer Daten präsentieren können.
A DataTemplate
wird daher verwendet, um eine visuelle Struktur für zugrunde liegende Daten bereitzustellen, während a ControlTemplate
nichts mit zugrunde liegenden Daten zu tun hat und lediglich ein visuelles Layout für das Steuerelement selbst bereitstellt.
A enthält ControlTemplate
im Allgemeinen nur TemplateBinding
Ausdrücke, die an die Eigenschaften des Steuerelements selbst gebunden sind, während a DataTemplate
Standardbindungsausdrücke enthält, die an die Eigenschaften seines Steuerelements DataContext
(des Geschäfts- / Domänenobjekts oder des Ansichtsmodells) gebunden sind .
Grundsätzlich
ControlTemplate
beschreibt a, wie ein Steuerelement angezeigt wird, während aDataTemplate
beschreibt, wie Daten angezeigt werden.Beispielsweise:
A
Label
ist ein Steuerelement und enthält ein Steuerelement,ControlTemplate
das besagt, dass das SteuerelementLabel
mit einemBorder
Inhalt (einemDataTemplate
oder einem anderen Steuerelement) angezeigt werden soll .Eine
Customer
Klasse ist Daten und wird mit einem angezeigt,DataTemplate
das sagen könnte, dass derCustomer
TypStackPanel
zwei enthält, wobeiTextBlocks
einer den Namen und der andere die Telefonnummer anzeigt. Es kann hilfreich sein zu beachten, dass alle Klassen mit angezeigtDataTemplates
werden. Normalerweise verwenden Sie nur die Standardvorlage,TextBlock
bei der dieText
Eigenschaft auf das Ergebnis der Objektmethode festgelegt istToString
.quelle
Troels Larsen hat eine gute Erklärung im MSDN-Forum
quelle
ControlTemplate
: Repräsentiert den Steuerungsstil.DataTemplate
: Repräsentiert den Datenstil (Wie möchten Sie Ihre Daten anzeigen).Alle Steuerelemente verwenden Standardsteuerelementvorlagen, die Sie über die Vorlageneigenschaft überschreiben können.
Die
Button
Vorlage ist beispielsweise eine Steuerungsvorlage.Button
Inhaltsvorlage ist eine Datenvorlagequelle
ControlTemplate
- Ändern des Erscheinungsbilds des Elements. Zum BeispielButton
kann Bild und Text enthaltenDataTemplate
- Darstellung der zugrunde liegenden Daten anhand der Elemente.quelle
ControlTemplate
DEFINIERT das visuelle Erscheinungsbild,DataTemplate
ERSETZT das visuelle Erscheinungsbild eines Datenelements.Beispiel: Ich möchte eine Schaltfläche von rechteckiger zu kreisförmiger Form anzeigen => Steuerungsvorlage.
Und wenn Sie komplexe Objekte an die Steuerung haben, ist es nur Anrufe und zeigt
ToString()
, mitDataTemplate
Ihnen ihre Werte des Datenobjekts verschiedenen Mitgliedern und anzeigen und ändern bekommen.quelle
Alle oben genannten Antworten sind großartig, aber es gibt einen entscheidenden Unterschied, der übersehen wurde. Das hilft, bessere Entscheidungen darüber zu treffen, wann was verwendet werden soll. Es ist
ItemTemplate
Eigentum:DataTemplate wird für Elemente verwendet, die die ItemTemplate-Eigenschaft bereitstellen, damit Sie den Inhalt der Elemente durch
DataTemplate
s ersetzen können, die Sie zuvor anhand gebundener Daten über einen von Ihnen bereitgestellten Selektor definiert haben.Aber wenn Ihr Steuer diesen Luxus nicht zur Verfügung stellt für Sie dann noch können Sie ein verwenden
ContentView
, die ihren Inhalt anzeigen kann aus vorgegebenControlTemplate
. Interessanterweise können Sie dieControlTemplate
Eigenschaft IhrerContentView
zur Laufzeit ändern . Beachten Sie außerdem, dass Sie im Gegensatz zu Steuerelementen mitItemTemplate
EigenschaftenTemplateSelector
für dieses Steuerelement (ContentView) kein Steuerelement haben können. Sie können jedoch weiterhin Trigger erstellen, um dieControlTemplate
Laufzeit zu ändern .quelle