Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何在Prism中使用数据模板_Wpf_Dependency Injection_Prism_Datatemplate - Fatal编程技术网

Wpf 如何在Prism中使用数据模板

Wpf 如何在Prism中使用数据模板,wpf,dependency-injection,prism,datatemplate,Wpf,Dependency Injection,Prism,Datatemplate,我已经使用Prism有一段时间了,我很享受解耦模块是多么容易 这对于视图和视图模型尤其有效,因为您可以通过接口注入视图模型,并通过区域管理器注入视图 不幸的是,只有当我的视图是完整的用户控件时,这才有效,除非我在这里遗漏了什么(我真诚地希望我是) 但很多时候,我会创建一个ViewModel和一个匹配的DataTemplate。然后,其他部件可以使用这些视图来组成视图 我的问题是,如果不引用包含程序集,就无法引用这些数据模板,因此在我的xaml文件中,我编写了如下内容: <ResourceD

我已经使用Prism有一段时间了,我很享受解耦模块是多么容易

这对于视图和视图模型尤其有效,因为您可以通过接口注入视图模型,并通过区域管理器注入视图

不幸的是,只有当我的视图是完整的用户控件时,这才有效,除非我在这里遗漏了什么(我真诚地希望我是)

但很多时候,我会创建一个ViewModel和一个匹配的DataTemplate。然后,其他部件可以使用这些视图来组成视图

我的问题是,如果不引用包含程序集,就无法引用这些数据模板,因此在我的xaml文件中,我编写了如下内容:

<ResourceDictionary Source="pack://application:,,/......>

我建议创建一个服务,将添加资源字典封装到Application.Resources.MergedDictionaries集合中

// Service interface (defined in the 'infrastructure' project)
public interface IResourceAggregator
{
    void AddResource(Uri resourceUri);
}

// Service implementation (implemented at the application/shell level)
class ResourceAggregator : IResourceAggregator
{
    public void AddResource(Uri resourceUri)
    {
        var resourceDictionary = new ResourceDictionary() { Source = resourceUri };
        var app = Application.Current;
        app.Resources.MergedDictionaries.Add(resourceDictionary);
    }
}

我希望您在模块加载期间“解析”此服务,并使用它“注册”模块本地资源字典。

您需要在模块启动时合并资源。您可以在此处阅读更多关于此的信息:


当然,您可以将此功能进一步抽象为一个可重用的服务。

这应该是可行的,唯一的缺点是,如果我没有显式地将数据模板导入到xaml文件中,我在xaml文件中就得不到任何帮助。例如,Resharper警告“找不到资源”,我失去了让我知道我是否拼写正确的反馈,等等。。。如果我能像引用接口一样引用数据模板。。。