В большом многопользовательском приложении у меня есть следующие настройки:
- A
Context
класс, содержащий ссылку на корень моей модели данных. Отсюда я могу добраться до всех других моделей.
- Класс
Commander
, который имеет методы для манипулирования моделью данных. Например, для объекта Layout
существует метод Commander.ResizeLayout(layout, width, height)
. Обратите внимание, что в основе этого класса лежит архитектура клиент-сервер; сервер связывается перед локальным обновлением свойств Layout.width
и Layout.height
.
- Внутренне,
Commander
имеет ссылку на Context
и гарантирует, что после обработки команды соответствующие объекты обновляются.
- Теперь я работаю над моделью представления (скажем,
LayoutViewModel
), которая используется для пользовательского элемента управления (LayoutForm
) для редактирования ширины и высоты Layout
.
Моя цель состоит в том, чтобы представление (модель) использовало класс Commander
для обработки любых изменений, внесенных в представление. Прямо сейчас я передаю Context
и Commander
конструктору главного окна. В файлах XAML объект Commander
вместе с соответствующими объектами данных (например, выбранный Layout
) передаются в меньшие элементы управления, такие как LayoutForm
.
.
Вот моя борьба: нехорошо продолжать проходить вокруг объектов, таких как Commander
, через привязки. В то же время я также считаю, что использование глобальных переменных (например, App.Commander
) - это не тот путь, и внедрение зависимостей из Microsoft.Extensions.DependencyInjection
(которое я использую в различных других проектах в своем решении), по-видимому, не доступно в глобальном масштабе в WPF.
Каким будет правильный способ доступа к объекту, подобному Commander
, из низкоуровневого элемента управления? Или я здесь упускаю большую точку?
Большое спасибо за любые предложения, которые помогают мне двигаться вперед!