我有两个问题。我有一个WPF UserControl,它是另一个WPF应用程序的.dll插件。
首先,除非我在使用我的Usercontrol dll的WPF应用程序中安装MVVMLight,否则它会抱怨它无法找到任何MVVMLight库。反正我是不是必须使用我的UserControl dll在主WPF应用程序上安装MVVMLight?
其次,它无法在我的UserControl中找到ViewModelLocator。我已经尝试将其设置为UserControl的StaticResource,但它无法找到ViewModelLocator。
请帮忙。
答案 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
。