If you use Prism InteractionRequest.PopupWindowAction feature, you might have found the MEF Import attribute does not work in the popup window.

This is because PopupWindowAction.WindowContent property creates a new instance of your xaml usercontrol which caused the conflit to MEF principal and consequently the Import chain is broken here.

My workaround is not to use xaml code for the interaction which may look like this:

<i:Interaction.Triggers>
<prism:InteractionRequestTrigger SourceObject="{Binding BizSelectionRequest, Mode=OneWay}">
<PopupWindowAction CenterOverAssociatedObject="True"
IsModal="True">
<PopupWindowAction.WindowContent>
<views:BizSearch />
</PopupWindowAction.WindowContent>
</PopupWindowAction>
</prism:InteractionRequestTrigger>
</i:Interaction.Triggers>

Instead, you can comment the above xaml code and create the expected interaction in your code behind:

                var triggerCollection = System.Windows.Interactivity.Interaction.GetTriggers(this);
InteractionRequestTrigger trigger = new InteractionRequestTrigger();
var binding = new Binding(“BizSearchRequest");
binding.Source = this.DataContext;
BindingOperations.SetBinding(trigger, InteractionRequestTrigger.SourceObjectProperty, binding);
PopupWindowAction pwa = new PopupWindowAction();
pwa.WindowContent = v;
pwa.WindowContent.DataContext = vm;
pa.CenterOverAssociatedObject = true;
pa.IsModal = true;
trigger.Actions.Add(pa);
triggerCollection.Add(trigger);

The "v" and "vm" are imported by MEF

[Import]
BizSearchPopup bizSearchPopup; [Import]
BizSearchPopupViewModel bizSearchPopupViewModel;

By this trick, a little dirty though, whatever you import within your BizSearchPopup or BizSearchPopupViewModel should work.

PopupWindowAction breaking MEF import?的更多相关文章

  1. Practical Go: Real world advice for writing maintainable Go programs

    转自:https://dave.cheney.net/practical-go/presentations/qcon-china.html?from=timeline   1. Guiding pri ...

  2. C#可扩展编程之MEF学习笔记(二):MEF的导出(Export)和导入(Import)

    上一篇学习完了MEF的基础知识,编写了一个简单的DEMO,接下来接着上篇的内容继续学习,如果没有看过上一篇的内容, 请阅读:http://www.cnblogs.com/yunfeifei/p/392 ...

  3. MEF 导入(Import)和导出(Export)

    前言: MEF不同于其他IOC容器(如:Castle)很重要的原因在于它使用了特性化编程模型(涉及到两个概念:“特性”和“编程模型”). 特性(Attribute):举例来说就是我们在开发过程中在类上 ...

  4. MEF学习

    一.   什么是MEF MEF(Managed Extensibility Framework)是一个用于创建可扩展的轻型应用程序的库. 应用程序开发人员可利用该库发现并使用扩展,而无需进行配置. 扩 ...

  5. 如何用 MEF 扩展应用程序

    最近在写一篇关于如何扩展 Visual Studio 编辑器的文章时,用到了 MEF,因此打算写一篇文章提一下这个技术点.本篇文章并不打算详细介绍 MEF,只是一个最简单的入门,相信您在阅读本篇文章后 ...

  6. NET 自带IOC容器MEF指初体验

    转自:http://www.cnblogs.com/ulex/p/4186881.html IOC容器:工具较多,大体功能都相同,大都需要事先对接口与实现进行配对(通过代码或配置文件),然后由系统自动 ...

  7. 实战MEF(3):只导出类的成员

    通过前面两篇文章的介绍,相信各位会明白MEF中有不少实用价值.上一文中我们也讨论了导入与导出,对于导出导入,今天我们再深入一点点,嗯,只是深入一点点而已,不会很难的,请大家务必放心,如果大家觉得看文章 ...

  8. 实战MEF(2):导出&导入

    上一文中,我们大致明白了,利用MEF框架实现自动扫描并组装扩展组件的思路.本文我们继续前进,从最初的定义公共接口开始,一步步学会如何使用MEF. 在上一文中我们知道,对于每一个实现了公共规范的扩展组件 ...

  9. 实战MEF(1):一种不错的扩展方式

    在过去,我们完成一套应用程序后,如果后面对其功能进行了扩展或修整,往往需要重新编译代码生成新的应用程序,然后再覆盖原来的程序.这样的扩展方式对于较小的或者不经常扩展和更新的应用程序来说是可以接受的,而 ...

随机推荐

  1. /usr文件系统

    /usr文件系统  /usr 文件系统经常很大,因为所有程序安装在这里. /usr 里的所有文件一般来自Linux distribution:本地安装的程序和其他东西在/usr/local 下.这样可 ...

  2. Spring中scope作用域

    scope作用域: 1.prototype 2.request      3.session 4.singleton 5.global session 1.prototype(多例) prototyp ...

  3. python 进程和线程

    python中的进程.线程(threading.multiprocessing.Queue.subprocess) Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就 ...

  4. Java 对象拷贝方式

    (1)BeanUtils.cloneBean()使用: http://www.cnblogs.com/fervour/archive/2009/12/18/1627868.html package c ...

  5. Java 开发环境的搭建

      配置JDK安装路径 1——JAVA_HOME 2——CLASSPATH               配置类库文件位置(特别注意:路径前面的”. “ 代表当前路径,分号用来区分路径) 3——PATH ...

  6. linux内核分析作业:操作系统是如何工作的进行:完成一个简单的时间片轮转多道程序内核代码

    计算机如何工作 三个法宝:存储程序计算机.函数调用堆栈.中断机制. 堆栈 函数调用框架 传递参数 保存返回地址 提供局部变量空间 堆栈相关的寄存器 Esp 堆栈指针  (stack pointer) ...

  7. 关于java.lang.NoSuchMethodError: android.widget.RelativeLayout.setBackground的解决办法

    今天用一个安卓4.0.4版本的手机测试手上的项目,发现logcat弹出这样一个提示“java.lang.NoSuchMethodError: android.widget.RelativeLayout ...

  8. Ubuntu jdk安装

    1. 创建目录 sudo mkdir /usr/lib/jvm 2. 解压 sudo tar -zxvf jdk-7u60-linux-x64.gz -C /usr/lib/jvm 3. 修改环境变量 ...

  9. 刷新本地的DNS缓存数据

    ipconfig /flushdns”执行,刷新本地的DNS缓存数据. ipconfig /displaydns      查看本地DNS缓存记录的命令为:ipconfig /displaydns.你 ...

  10. 使用MyBatis对表执行CRUD操作

    一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...