Domanda

Sto cercando di capire come aggiungere un DataTemplate al dizionario risorse del app. Ho familiarità con il modo di fare in modo che quando il DataTemplate è in XAML (tramite un URI), ma io sono una specie confusa a come fare in modo che quando il DataTemplate viene definita nel codice.

Quello che ho, che non funziona è -

        //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: come meglio posso il DataTemplate non farne dizionario risorse della App, pur non gettando errori. Quando il ViewModel viene successivamente chiamato da XAML, si comporta come se non v'è un DataTemplate corretto per visualizzarlo. Ad esempio,

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

I risultati in una finestra vuota con il testo "ShellPrototype.ViewModels.CoordinateViewModel" displayed- EG, non ha un modello per visualizzare la vista.

È stato utile?

Soluzione

La chiave qui, al fine di rendere questo lavoro in modo corretto, è quello di utilizzare DataTemplateKey :

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

In questo caso, dovrebbe funzionare come specificato. Tuttavia, il FrameworkElementFactory è, secondo la documentazione "un modo deprecato per creare a livello di codice template", quindi si consiglia di analizzare direttamente il codice XAML.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top