Архитектура MVVM для большого проекта управления пользователями - PullRequest
0 голосов
/ 27 февраля 2019

Недавно меня попросили преобразовать довольно большое настольное приложение в единый элемент управления, который можно добавить в другие формы / окна.В настольной версии он состоит из главного окна, которое порождает другие окна.

Существует класс ViewModelLocator, который инициализирует различные объекты и модели представления для окон и внедряет надлежащие объекты в конструкторы этих моделей представления.Вот пример того, что находится в ViewModelLocator и MainWindow.xaml:

public class ViewModelLocator
{
    CustomMap Map = new CustomMap();
    ObservableCollection<Styles> MapStyles = new ObservableCollection<Styles>();

    public MainViewModel MainViewModel
    {
        get
        {
            if (_mainViewModel == null)
            {
                _mainViewModel = new MainViewModel(Map, Styles);
            }
            return _mainViewModel;
        }
    }
}

Вот как основное окно устанавливает его текстовый текст:

<Window x:Class="DesktopApp.MainWindow"
        DataContext="{Binding Path=MainViewModel, Source={StaticResource ViewModelLocator}}"
</Window>

И это в App.xaml для добавленияViewModelLocator как ресурс:

<Application.Resources>
    <vm:ViewModelLocator x:Key="ViewModelLocator" />
</Application.Resources>

Есть несколько других моделей представления и окон, настроенных таким же образом.Все они совместно используют различные объекты, которые инициируются в viewmodellocator, когда локатор вводит эти объекты в конструкторы моделей представления.

Основная проблема заключается в том, что когда я конвертирую это приложение в usercontrol, мне нужно избавитьсяиз App.xaml, который также забирает viewmodellocator, если я не сделаю все в нем статичным или не сделаю какую-то одноэлементную его версию.

Каков наилучший способ инициализации этих моделей представления и обмена данными между ними?Должен ли я поместить все в код MainWindow (теперь это пользовательский контроль), поскольку сейчас это точка входа?

Я бы хотел, чтобы это максимально соответствовало шаблону MVVM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...