Jaka jest różnica między a ControlTemplate
a DataTemplate
WPF?
źródło
Jaka jest różnica między a ControlTemplate
a DataTemplate
WPF?
Zwykle formant jest renderowany dla samego siebie i nie odzwierciedla podstawowych danych. Na przykład obiekt Button
nie byłby związany z obiektem biznesowym - jest tam wyłącznie, aby można go było kliknąć. A ContentControl
lub ListBox
, na ogół, pojawiają się, aby móc przedstawić dane dla użytkownika.
A DataTemplate
zatem służy do zapewnienia wizualnej struktury bazowych danych, podczas gdy ControlTemplate
nie ma nic wspólnego z podstawowymi danymi i po prostu zapewnia wizualny układ samej kontrolki.
A na ControlTemplate
ogół będzie zawierać tylko TemplateBinding
wyrażenia, wiążące się z właściwościami samego formantu, podczas gdy a DataTemplate
będzie zawierało standardowe wyrażenia Binding, wiążące się z właściwościami jego DataContext
(obiektu biznesowego / domeny lub modelu widoku).
Zasadniczo
ControlTemplate
opisuje sposób wyświetlania Kontroli, aDataTemplate
opisuje sposób wyświetlania Danych.Na przykład:
A
Label
jest formantem, który będzie zawierał komunikat,ControlTemplate
któryLabel
powinien być wyświetlany przy użyciuBorder
jakiejś Treści (aDataTemplate
lub innej Kontroli).Customer
Klasa danych i będą wyświetlane za pomocąDataTemplate
których można powiedzieć, aby wyświetlićCustomer
typ jakoStackPanel
zawierający dwieTextBlocks
jeden pokazujący nazwę i inne wyświetlanie numeru telefonu. Może to być pomocne, aby pamiętać, że wszystkie klasy są wyświetlane przy użyciuDataTemplates
, będzie tylko zazwyczaj użyć domyślnego szablonu, który jestTextBlock
zText
właściwości zestawu do wyniku obiektuToString
metody.źródło
Troels Larsen ma dobre wyjaśnienie na forum MSDN
źródło
ControlTemplate
: Reprezentuje styl kontroli.DataTemplate
: Reprezentuje styl danych (Jak chcesz pokazać swoje dane).Wszystkie formanty używają domyślnego szablonu kontroli, który można zastąpić za pomocą właściwości szablonu.
Na przykład
Button
szablon jest szablonem sterującym.Button
szablon treści to szablon danychźródło
ControlTemplate
- Zmiana wyglądu elementu. Na przykładButton
może zawierać obraz i tekstDataTemplate
- Reprezentowanie podstawowych danych za pomocą elementów.źródło
ControlTemplate
OKREŚLA wygląd wizualny, WYMIENIA wyglądDataTemplate
zewnętrzny elementu danych.Przykład: Chcę pokazać przycisk z formularza prostokątnego do koła => Szablon kontrolny.
A jeśli masz złożone obiekty do kontroli, to po prostu wywołuje i pokazuje
ToString()
, dziękiDataTemplate
czemu możesz uzyskać różnych członków oraz wyświetlać i zmieniać ich wartości obiektu danych.źródło
Wszystkie powyższe odpowiedzi są świetne, ale brakuje istotnej różnicy. Pomaga to podejmować lepsze decyzje o tym, kiedy z czego korzystać. Jest
ItemTemplate
własnością:DataTemplate jest używany w przypadku elementów, które zapewniają właściwość ItemTemplate w celu zastąpienia zawartości jego elementów za pomocą
DataTemplate
s zdefiniowanych wcześniej zgodnie z powiązanymi danymi za pomocą podanego selektora.Ale jeśli twoja kontrola nie zapewni ci tego luksusu , nadal możesz użyć takiego,
ContentView
który może wyświetlać jego zawartość z góry określonychControlTemplate
. Co ciekawe, możesz zmienićControlTemplate
właściwość swojegoContentView
w czasie wykonywania. Trzeba jeszcze zauważyć, że w przeciwieństwie do kontrolek zItemTemplate
właściwością, nie można miećTemplateSelector
kontrolki (ContentView). Nadal można jednak tworzyć wyzwalacze, które zmieniająControlTemplate
środowisko wykonawcze.źródło