我正在试图弄清楚如何将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,它没有显示视图的模板.
最佳答案 为了使这项工作正常,这里的关键是使用
DataTemplateKey:
ResourceDictionary dictionary = new ResourceDictionary();
dictionary.Add(new DataTemplateKey(typeof(CoordinateViewModel)), template);
如果这样做,它应该按照指定的方式工作.但是,根据文档,FrameworkElementFactory是“以编程方式创建模板的一种不赞成的方式”,因此您可能希望直接解析XAML.