如何在 DLL 中为 windows 使用视图模型

How to use view models for windows inside a DLL

我是 WPF 新手。这是 xaml 定义一个 window 定义在一个 DLL 中:

<Window x:Class="MyNamespace.MyClass"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d1p1="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        d1p1:Ignorable="d"
        xmlns:attachedProperties="clr-namespace:MyNamespace.AttachedProperties"
        xmlns:viewModels="clr-namespace:MyNamespace.ViewModels"
        DataContext="{Binding Source={StaticResource VmLocator}}"
        Title="{Binding MyVm.MyTitle, Mode=OneTime}" Height="300" Width="460">
    <Window.Resources>
        <viewModels:ViewModelLocatorTestSteps x:Key="VmLocator" d:IsDataSource="True" />
    </Window.Resources>

当客户端代码构造这个window对象时,抛出这个异常:

Cannot find resource named 'VmLocator'

如何提前定义资源,以便在需要时存在?我也更喜欢启用 Intellisense 的解决方案。这是我第一次尝试在 DLL 中定义 window。

使用 Visual Studio 2013.

如果您希望 Window 创建自己的 DataContext,您可以将其粘贴在代码隐藏的构造函数中,避免将 VmLocator 设为资源的必要性。 WPF 控件(包括 Window)的资源可供该控件的子控件使用。

刚刚:

 public MyNamespace()
 {
     InitializeComponents();
     this.DataContext = new VmLocator();
 }

如果您真的想让您的 DataContext 成为一种资源,您可以创建一个应用程序级资源并引用它。

此外 - 'MyNamespace' 对于 class 来说是一个非常令人困惑的名称 :)