Как установить владельца для диалога, открытого из модели представления? - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть родительское представление, которое показывает сетку.В одном из столбцов есть кнопка в каждой строке, чтобы показать дочернее диалоговое окно для редактирования объекта, с которым связана каждая строка сетки.Кнопка связана с командой на модели представления, которая показывает диалог.Я использую CommandParameter="{Binding}", чтобы передать ссылку на объект для редактирования в модель представления дочернего диалога.

Я хочу, чтобы диалог центрировался относительно окна, которое он открыл, из которого я могу сделать с dialog.WindowStartupLocation = WindowStartupLocation.CenterOwner но мне нужна ссылка на родительское окно.

Я могу придумать два решения, но я не думаю, что одно из них является чистым.

  1. Если бы я не былУже не используя параметр команды, я мог бы передать окно в родительскую модель вида, как это CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}".Я мог бы использовать множественную привязку и конвертер для передачи двух параметров, но разве это хорошая практика?Я склонен думать, что модель представления не должна знать ничего о представлениях.

  2. Я могу передать ссылку на родительское окно, в котором размещено родительское представление, его модели представления в модели представления.конструктор.Опять же, мне не нравится то, что модель представления знает об окнах, которые кажутся зависимостью в неправильном направлении.

Что мне также не нравится в любом из этих подходов, так этородительская модель представления должна знать о дочернем окне, которое она создает.

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

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