数据绑定ViewModel以查看静态加载的程序集内部

时间:2016-02-26 15:51:12

标签: c# wpf xaml mvvm viewmodellocator

我正在编写一个库,我们的主要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魔术发生?

1 个答案:

答案 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