我被要求将使用 MVVM 模式的独立 WPF 应用程序转换为用户控件。这个应用程序由一个主窗口和几个其他窗口组成。但是,我在尝试这样做时遇到了一些错误,这些错误都指向我的 App.xaml 类和声明为转换器的其他资源:
Library project file cannot specify ApplicationDefintion element.
The project file contains a property value that is not valid.
The name "ViewModelLocator" does not exist in the namespace "clr-namespace:MapperX.ViewModels"
.
所以看起来错误围绕着我的 ViewModelLocator。
目前项目目录结构设置如下:
顶级 -> ViewModels 文件夹 -> ViewModelLocator
App.xaml 的设置如下:
<Application x:Class="MapperX.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MapperX"
xmlns:vm="clr-namespace:MapperX.ViewModels"
StartupUri="MainWindow.xaml">
<Application.Resources>
<vm:ViewModelLocator x:Key="ViewModelLocator" />
</Application.Resources>
</Application>
这是该ViewModelLocator
课程的一个片段:
namespace MapperX.ViewModels
{
/// <summary>
/// This class instantiates all the viewmodels
/// </summary>
public class ViewModelLocator
{
WpfMap map = new WpfMap();
private MainViewModel _mainViewModel;
public MainViewModel MainViewModel
{
get
{
if (_mainViewModel == null)
{
_mainViewModel = new MainViewModel(map)
}
return _mainViewModel;
}
}
private LayersViewModel _layersViewModel;
public LayersViewModel LayersViewModel
{
get
{
if (_layersViewModel == null)
{
_layersViewModel = new LayersViewModel(map)
}
return _layersViewModel;
}
}
}
}
然后我DataContext
为视图 .xaml 设置如下:
DataContext="{Binding Path=MainViewModel, Source={StaticResource ViewModelLocator}}"
在没有 App.xaml 的情况下仍然能够使用 ViewModelLocator 的正确方法是什么?