Pregunta

Estoy tratando de encontrar la manera de añadir un DataTemplate al diccionario de recursos de la aplicación. Estoy familiarizado con la forma de hacerlo cuando el DataTemplate es en XAML (a través de un URI), pero estoy un poco borrosa en la forma de hacerlo cuando el DataTemplate se define en el código.

Lo que tengo, lo que no está funcionando es -

        //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: Lo mejor que puedo DataTemplate no lo hace en el diccionario de recursos de la aplicación, a pesar de no arrojar ningún error. Cuando el modelo de vista se llama después de XAML, actúa como si no hay un DataTemplate adecuado para mostrarlo. Por ejemplo,

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

Los resultados en una ventana vacía con el texto "ShellPrototype.ViewModels.CoordinateViewModel" displayed- EG, no tienen una plantilla para mostrar la vista.

¿Fue útil?

Solución

La clave aquí, con el fin de hacer que esto funcione correctamente, es utilizar DataTemplateKey :

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

Si lo hace, debería funcionar como se especifica. Sin embargo, el FrameworkElementFactory es, de acuerdo con los documentos "una forma obsoleta crear mediante programación las plantillas", por lo que es posible que desee analizar el XAML directamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top