Wpf 使用MEF导出MVVM视图

Wpf 使用MEF导出MVVM视图,wpf,xaml,mvvm,mef,markup-extensions,Wpf,Xaml,Mvvm,Mef,Markup Extensions,我正在构建的应用程序有几个(10+)[Module]可执行文件 我想在[Module]View.xaml文件中指定类似的内容 <Window ... mef:ExportView ExpectingViewModel={x:Type [Module]ViewModel} > </Window> 其中mef:ExportView是一个为mef编写器准备部件的程序 目前 在[Module]View.xaml.cs文件中,我在。(typeof参数指定预期的Vi

我正在构建的应用程序有几个(10+)
[Module]
可执行文件

我想在
[Module]View.xaml文件中指定类似的内容

<Window ... 
    mef:ExportView ExpectingViewModel={x:Type [Module]ViewModel}
>
</Window>

其中
mef:ExportView
是一个为mef编写器准备部件的程序

目前

  • [Module]View.xaml.cs
    文件中,我在。(typeof参数指定预期的ViewModel。)
  • 我还使用
    [ExportViewModel]
    属性标记我的ViewModel
  • (这两个属性都派生自ExportAttribute。)
  • 每个可执行文件的应用程序类还继承自一个
    ApplicationBase
    类,该类执行MEF组合并与视图/视图模型结合/链接
现在,我希望能够从
[Module]View.xaml.cs
中删除所有代码隐藏,以防止我和同事忘记标记代码隐藏文件


我想这需要一个定制的MarkupExtension。我熟悉MEF的基础知识,以及使用元数据创建自定义导出属性。然而,我认为这个解决方案需要从一些公式中推导出来。

我不需要精确的解决方案;只是“导出导出定义并执行bli。导出ComposablePart并执行bla。当您编写时,执行ji。”有趣的问题。我个人认为这并没有太大的开销,但也许使用T4模板你就能解决这个问题?看@surfen:这个问题读起来很有趣。我认为OP的目标是生成大量代码(类似于LightSwitch,正如公认的答案第5点所提到的)。我曾考虑过执行
InheritedExport
,但这不允许我获取正在查找的ViewModel类型元数据。我还知道我可以执行
继承的导出
,实例化所有视图并扫描
导出视图扩展
,但我宁愿使用
惰性
。(最后一个选项可能是我的唯一选项。)