4

我试图弄清楚如何将 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 不会进入应用程序的资源字典,尽管没有抛出任何错误。当稍后从 XAML 调用 ViewModel 时,它的行为就像没有合适的 DataTemplate 来显示它一样。例如,

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

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

4

1 回答 1

2

为了使其正常工作,这里的关键是使用DataTemplateKey

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

如果你这样做,它应该按规定工作。但是,根据文档, FrameworkElementFactory是“一种以编程方式创建模板的已弃用方法”,因此您可能希望直接解析 XAML。

于 2009-12-23T01:22:48.103 回答