Laden...

DataTemplate außerhalb von ItemCollections

Erstellt von onlinegurke vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.302 Views
O
onlinegurke Themenstarter:in
778 Beiträge seit 2007
vor 14 Jahren
DataTemplate außerhalb von ItemCollections

Hallo zusammen,

ich hab leider nichts dazu gefunden, aber ist es möglich ein DataTemplate auch außerhalb eines Selectors oder einer Liste zu benutzen? Also ich bekomme ein (einzelnes) Objekt rein, was einen von mehreren Typen haben kann. Jetzt war mein Plan eben für jeden möglichen Typen ein DataTemplate zu erstellen, die alle mit den entsprechenden Typen als Schlüssel in die Resourcen zu schieben und dann aus den Objekten irgendwie die Visuals nach den Vorlagen der DataTemplates an einer bestimmten Stelle einzufügen. Naiver Weise hab ich's mit einem ContentPresenter versucht in der Hoffnung, dass der wenn es ein passendes DataTemplate gibt, auf dieses auch zurückgreifen würde, aber das hat er leider nicht getan.

Oder gibt es dazu eine bessere Möglichkeit?

Georg

6.862 Beiträge seit 2003
vor 14 Jahren

Hallo,

die DataTemplates direkt anwenden würde er nur wenn du die Objekte direkt im XAML als Tag hinzufügen würdest. Aber an sich ist der ContentPresenter doch gut. Du musst halt nur nen passenden ContentTemplateSelector schreiben.

Baka wa shinanakya naoranai.

Mein XING Profil.

O
onlinegurke Themenstarter:in
778 Beiträge seit 2007
vor 14 Jahren

OK, hatte gedacht/gehofft er würde das Template automatisch anhand der Typen zuordnen können, wenn ich als Key die jeweiligen Typen verwende. Naja. TemplateSelector schreiben ist ja auch nicht so der Aufwand. Aber Danke für den Hinweis

O
onlinegurke Themenstarter:in
778 Beiträge seit 2007
vor 14 Jahren

Funktioniert. Der TemplateSelector, der einfach nach dem entsprechenden Typ sucht ist auch wirklich sehr kurz (wenn die DataTemplates wie in meinem Beispiel alle in den Anwendungsresourcen lagern):

public override DataTemplate SelectTemplate(object item, System.Windows.DependencyObject container)
        {
            if (item == null) return null;
            return App.Current.Resources[item.GetType()] as DataTemplate;
        }