将数据绑定到静态加载程序集内的视图模型

本文关键字:视图 模型 程序集 加载 数据绑定 静态 | 更新日期: 2023-09-27 18:36:18

我正在编写一个库,我们的主 WPF GUI 项目在运行时使用反射静态加载。我的类库尝试加载视图模型,目的是在 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 魔术?

将数据绑定到静态加载程序集内的视图模型

抱歉,不要那么精确,因为您显示的代码并不反映您为加载插件所做的提升。它并不真正代表您的问题,但总的来说......

您是否考虑过查看 MEF - 托管扩展性框架?有很多文章如何构建 MVVM 应用程序以在运行时使用 viewmodel 加载视图。这也非常适合视图模型定位器模式。

有一个不错的(但很老的)视频系列,来自Mike Taulty,关于如何将mef与Silverlight一起使用。由于 Silverlight 是 WPF/XAML 的一个子集,因此即使技术略有不同,这些概念仍然适用,因此您可能需要进行调整。

但肯定值得一看,因为它可以让您了解如何构建插件架构以及 mef 的工作原理。

https://channel9.msdn.com/Blogs/mtaulty/MEF--Silverlight-4-Beta-Part-1-Introduction(每个视频都有一个指向该系列下一个视频的链接)