使用MVVMLight的WPF UserControl无法找到ViewModelLocator

时间:2018-05-30 21:16:02

标签: c# wpf user-controls mvvm-light viewmodellocator

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

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

其次,它无法在我的UserControl中找到ViewModelLocator。我已经尝试将其设置为UserControl的StaticResource,但它无法找到ViewModelLocator。

请帮忙。

1 个答案:

答案 0 :(得分:2)

以下是有关如何使用View Model Locator的示例:

从简单的ViewModel开始:

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

定义ViewModelLocator

public class ViewModelLocator
{
    private static readonly MainViewModel mainViewModel;

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

    public static MainViewModel MainViewModel => mainViewModel;
}

如您所见,您的ViewModel实例仅在静态构造函数中创建一次,之后返回相同的实例。

以下是View

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

将定位器设置为Resource,并将其用作主容器的DataContext,在这种情况下为Grid

相关问题