У меня есть родительское представление, которое показывает сетку.В одном из столбцов есть кнопка в каждой строке, чтобы показать дочернее диалоговое окно для редактирования объекта, с которым связана каждая строка сетки.Кнопка связана с командой на модели представления, которая показывает диалог.Я использую CommandParameter="{Binding}"
, чтобы передать ссылку на объект для редактирования в модель представления дочернего диалога.
Я хочу, чтобы диалог центрировался относительно окна, которое он открыл, из которого я могу сделать с dialog.WindowStartupLocation = WindowStartupLocation.CenterOwner
но мне нужна ссылка на родительское окно.
Я могу придумать два решения, но я не думаю, что одно из них является чистым.
Если бы я не былУже не используя параметр команды, я мог бы передать окно в родительскую модель вида, как это CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"
.Я мог бы использовать множественную привязку и конвертер для передачи двух параметров, но разве это хорошая практика?Я склонен думать, что модель представления не должна знать ничего о представлениях.
Я могу передать ссылку на родительское окно, в котором размещено родительское представление, его модели представления в модели представления.конструктор.Опять же, мне не нравится то, что модель представления знает об окнах, которые кажутся зависимостью в неправильном направлении.
Что мне также не нравится в любом из этих подходов, так этородительская модель представления должна знать о дочернем окне, которое она создает.
Я видел этот ответ, который показывает, как использовать сервис, который модель представления может использовать для открытия окна безиметь какие-либо знания о его создании, и это здорово, но я думаю о чистом способе передачи родительского окна без прохождения модели представления.