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