1

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

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

其次,它在我的 UserControl 中找不到 ViewModelLocator。我尝试将其设为我的 UserControl 的 StaticResource,但找不到 ViewModelLocator。

请帮忙。

4

1 回答 1

0

以下是有关如何使用 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>

将 Locator 设置为 aResource并将其用DataContext作主容器的,在这种情况下是 a Grid

于 2018-06-11T15:39:26.927 回答