在代码中将DataTemplate(非XAML)添加到资源字典中?

时间:2009-12-22 23:45:46

标签: c# wpf datatemplate resourcedictionary

我正在试图弄清楚如何将DataTemplate添加到应用程序的资源字典中。当DataTemplate在XAML中时(我通过uri),我很熟悉如何这样做,但是当我在代码中定义DataTemplate时,我对如何做到这一点很模糊。

我所拥有的,不起作用的是 -

        //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);

编辑:尽管没有丢失任何错误,但我尽可能地将DataTemplate放入App的资源字典中。稍后从XAML调用ViewModel时,它就好像没有适当的DataTemplate来显示它。例如,

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

显示文本“ShellPrototype.ViewModels.CoordinateViewModel”的空窗口显示结果 - EG,它没有显示视图的模板。

1 个答案:

答案 0 :(得分:2)

为了使这项工作正常,此处的关键是使用DataTemplateKey

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

如果您这样做,它应该按照指定的方式工作。但是,根据文档,FrameworkElementFactory是“以编程方式创建模板的弃用方式”,因此您可能需要直接解析XAML。