Мне было предложено разработать диалоговое окно в WPF, которое содержит элемент управления картой (OnlineMapControl). Управление картой & связанная бизнес-логика находится в коде позади. Я создал свой контроль как окно, а также написал простую модель представления.Код за управлением с шаблоном MVVM?
Родительский вид, который запускает диалог, находится в командной строке в виде модели. Я знаю, что в идеале мы должны использовать в IDialogService или эквивалент, однако старшие посоветовали мне пойти с .showdialog() в методе командного вида модели а-ля:
Public ShowChildDialogCommandAction()
{
DialogViewModel dialogViewModel = NewDialogViewModel();
DialogView dialogview = new DialogView(dialogViewModel);
dialogView.ShowDialog();
}
Это работает отлично, тесная связь в стороне. Проблемы возникают, когда я пытаюсь получить доступ к свойствам в коде дочернего представления, находящимся под управлением карты. Экземпляр dialogViewModel ничего не знает о модуле OnlineMapControl, поэтому я пытаюсь преследовать значение свойства через все эти классы с именами дублированных свойств &, попадая в логические спагетти в коде DialogView позади с this.onlineMapControl.zoomLevel = this.dialogViewModel.zoomLevel
и т. Д. Который имеет очень плохой запах кода. Как вы справляетесь с дизайном, близким к этому, потому что сложный элемент управления в представлении доступен только через код за & сохранить шаблон MVVM неповрежденным?
Трудно прокомментировать без кода, который точно показывает, в чем проблема. Похоже, что ваш контроль над картой должен раскрывать различные свойства зависимостей для таких вещей, как «ZoomLevel», а затем вы просто привязываете их к вашему «DialogViewModel» в «DialogView». –
mvvm! = No codebehind. Логика пользовательского интерфейса должна идти в вашем пользовательском интерфейсе. – Will