C# 使用MVVMLight can';找不到ViewModelLocator

C# 使用MVVMLight can';找不到ViewModelLocator,c#,wpf,user-controls,mvvm-light,viewmodellocator,C#,Wpf,User Controls,Mvvm Light,Viewmodellocator,我有两个问题。我有一个WPF用户控件,它是另一个WPF应用程序的.dll插件 首先,除非我在使用Usercontrol dll的WPF应用程序中安装MVVMLight,否则它会抱怨找不到任何MVVMLight库。我是否不必使用UserControl dll在主WPF应用程序上安装MVVMLight 其次,它在我的UserControl中找不到ViewModelLocator。我尝试将其作为UserControl的静态资源,但它找不到ViewModelLocator 请提供帮助。以下是有关如何使用

我有两个问题。我有一个WPF用户控件,它是另一个WPF应用程序的.dll插件

首先,除非我在使用Usercontrol dll的WPF应用程序中安装MVVMLight,否则它会抱怨找不到任何MVVMLight库。我是否不必使用UserControl dll在主WPF应用程序上安装MVVMLight

其次,它在我的UserControl中找不到ViewModelLocator。我尝试将其作为UserControl的静态资源,但它找不到ViewModelLocator


请提供帮助。

以下是有关如何使用视图模型定位器的示例:

从一个简单的
视图模型开始

public class MainViewModel
{
    public string TestProperty { get; set; } = "ViewModelLocator works fine!";
}
public class ViewModelLocator
{
    private static readonly MainViewModel mainViewModel;

    static ViewModelLocator()
    {
        mainViewModel = new MainViewModel();
    }

    public static MainViewModel MainViewModel => mainViewModel;
}
<Window x:Class="SetViewModelLocator.MainWindow"
    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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:SetViewModelLocator"
    xmlns:vm="clr-namespace:SetViewModelLocator.ViewModels"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <vm:ViewModelLocator x:Key="ViewModelLocator"/>
</Window.Resources>
<Grid DataContext="{Binding Source={StaticResource ViewModelLocator}, Path=MainViewModel}">
    <TextBlock Text="{Binding TestProperty}"/>
</Grid>
定义
ViewModelLocator

public class MainViewModel
{
    public string TestProperty { get; set; } = "ViewModelLocator works fine!";
}
public class ViewModelLocator
{
    private static readonly MainViewModel mainViewModel;

    static ViewModelLocator()
    {
        mainViewModel = new MainViewModel();
    }

    public static MainViewModel MainViewModel => mainViewModel;
}
<Window x:Class="SetViewModelLocator.MainWindow"
    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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:SetViewModelLocator"
    xmlns:vm="clr-namespace:SetViewModelLocator.ViewModels"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <vm:ViewModelLocator x:Key="ViewModelLocator"/>
</Window.Resources>
<Grid DataContext="{Binding Source={StaticResource ViewModelLocator}, Path=MainViewModel}">
    <TextBlock Text="{Binding TestProperty}"/>
</Grid>
如您所见,ViewModel的实例在静态构造函数中只创建一次,然后返回相同的实例

这是
视图

public class MainViewModel
{
    public string TestProperty { get; set; } = "ViewModelLocator works fine!";
}
public class ViewModelLocator
{
    private static readonly MainViewModel mainViewModel;

    static ViewModelLocator()
    {
        mainViewModel = new MainViewModel();
    }

    public static MainViewModel MainViewModel => mainViewModel;
}
<Window x:Class="SetViewModelLocator.MainWindow"
    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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:SetViewModelLocator"
    xmlns:vm="clr-namespace:SetViewModelLocator.ViewModels"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <vm:ViewModelLocator x:Key="ViewModelLocator"/>
</Window.Resources>
<Grid DataContext="{Binding Source={StaticResource ViewModelLocator}, Path=MainViewModel}">
    <TextBlock Text="{Binding TestProperty}"/>
</Grid>


将定位器设置为
资源
,并将其用作主容器的
数据上下文
,在本例中,主容器是一个
网格

,显然,用户控件依赖于MvvmLight。您必须删除此依赖项,或者确保始终将MvvmLight程序集引入使用您的UserControl的任何应用程序中。因此无法将它们捆绑到my DLL中?还有,关于为什么它找不到我的ViewModelLocator,你有什么想法吗?这并不能回答我的问题。我需要它位于DLL中的UserControl中,然后在另一个WPF项目中使用它,我无法修改app.xaml以将定位器放入其中。我的问题是在UserControl中找不到我的定位器。