在 MVVM WPF Class 库中打开新的 window

Opening new window in a MVVM WPF Class Libary

基本上我正在寻找 this Answer,但是 Class 图书馆 .

我目前正在维护一个更大的 WPF 解决方案,其中每个部分都作为 加载项 加载。 我想为所有这些 加载项 创建一个服务来实现它打开一个 Window 而不使用 中的 UI 元素ViewModel,基本上是这样的:

class WindowService:IWindowService
{
    public void ShowWindow(object viewModel)
    {
        var win = new Window();
        win.Content = viewModel;
        win.Show();
    }
} 

为简化起见,假设我们有 4 个项目:

1.客户


2。加载项

我链接的答案在 App.Xaml 中定义了 DataTemplates,但我无法为 Class 定义 DataTemplates 我当时不知道,因为加载项是在运行时使用 Reflection 加载的。

我应该把我的 DataTemplates 放在哪里,以便让链接的答案适用于 Class 没有 App.Xaml 的图书馆?

我所做的是在我的每个 class 库中都有一个 xaml 资源文件,并以编程方式将它们合并到主应用程序资源中。

假设 class 库项目程序集名称为“MyProject.Client”,它包含资源文件 \Views\Resources\LibraryStyles.xaml。合并它的代码如下所示:

Application.Current.Resources.MergedDictionaries.Add(
    new ResourceDictionary
        {
            Source = new Uri("pack://application:,,,/MyProject.Client;component/Views/Resources/LibraryStyles.xaml",
            UriKind.RelativeOrAbsolute)
        });