我正在编写一个库,我们的主要WPF GUI项目在运行时使用Reflection静态加载。我的类库尝试加载ViewModel,目的是在WPF GUI中显示其关联的视图。这似乎不起作用。这是因为WPF无法访问我在我的库中声明的绑定吗?我在库中有一个名为CommonResources.resx的文件,如下所示:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:vm="clr-namespace:Plugin.ViewModel"
xmlns:v="clr-namespace:Plugin.View"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
<DataTemplate DataType="{x:Type vm:MyViewModel}">
<v:MyView/>
</DataTemplate>
</ResourceDictionary>
当主GUI尝试显示MyViewModel时,如何让WPF魔术发生?
答案 0 :(得分:0)
很抱歉,由于您显示的代码并未反映出您正在加载插件所做的提升,因此不会那么精确。它对你的问题并不具有代表性,但总的来说......
您是否考虑过MEF - Managed Extensibility Framework? 有很多文章如何构建MVVM应用程序以在运行时使用viewmodel加载视图。这与视图模型定位器模式非常吻合。
有一个很好(但很旧)的视频系列形式mike taulty如何使用银色的mef。由于Silverlight是WPF / XAML的一个子集,因此即使技术略有不同,这些概念仍然适用,因此您可能需要进行调整。
但值得关注,因为它可以让您了解如何构建插件架构以及mef如何工作。
https://channel9.msdn.com/Blogs/mtaulty/MEF--Silverlight-4-Beta-Part-1-Introduction (每个视频都有一个链接到系列中的下一个)
HTH