Frage

Ich versuche, herauszufinden, wie ein Datatemplate auf die App-Ressource Wörterbuch hinzuzufügen. Ich bin vertraut mit, wie dies zu tun, wenn die Datatemplate in XAML ist (über ein uri), aber ich bin ein bisschen unscharf, wie dies zu tun, wenn die Datatemplate im Code definiert sind.

Was ich habe, was nicht funktioniert, ist -

        //Create DataTemplate
        DataTemplate template = new DataTemplate(typeof(CoordinateViewModel));
        FrameworkElementFactory ViewStack = new FrameworkElementFactory(typeof(CoordinateView));
        ViewStack.Name = "myViewStack";

        template.VisualTree = ViewStack;


        ResourceDictionary dictionary = new ResourceDictionary();
        dictionary.BeginInit();
        dictionary.Add(template, template);
        dictionary.EndInit();

        App.Current.Resources.MergedDictionaries.Add(dictionary);

EDIT: Wie gut ich kann die Datatemplate macht es nicht in die Ressourcenverzeichnis App trotz keine Fehler zu werfen. Wenn das Ansichtsmodell später von XAML genannt wird, wirkt es, als gäbe es keine richtige Datatemplate ist es angezeigt werden soll. Zum Beispiel:

<StackPanel>
    <ContentPresenter Content="{Binding ViewModel}" />
</StackPanel>

Ergebnisse in einem leeren Fenster mit dem Text „ShellPrototype.ViewModels.CoordinateViewModel“ displayed- EG, ist es nicht eine Vorlage hat die Ansicht angezeigt werden soll.

War es hilfreich?

Lösung

Der Schlüssel hier, um diese Arbeit richtig zu machen, zu verwenden ist DataTemplateKey :

ResourceDictionary dictionary = new ResourceDictionary();
dictionary.Add(new DataTemplateKey(typeof(CoordinateViewModel)), template);

Wenn Sie dies tun, sollte es wie angegeben funktionieren. Allerdings ist die Framework ist nach der Dokumentation „eine veraltete Art und Weise programmatisch Vorlagen erstellen“, so dass Sie möchten die XAML direkt analysieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top