Меня попросили преобразовать отдельное приложение WPF, использующее шаблон MVVM, в пользовательский элемент управления. Это приложение состоит из главного окна и нескольких других окон. Однако при попытке сделать это я получаю несколько ошибок, указывающих на мой класс 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}}"
Как правильно по-прежнему иметь возможность использовать ViewModelLocator без App.xaml ??