Диалоговые окна (Реальные)

Попробовав много различных решений я продолжаю возвращаться к этому. Мне нужно Окно. ShowDialog, с помощью класса ViewModelLocator в качестве фабрики через UnityContainer.

В основном у меня есть Представление (и ViewModel), который на нажатии кнопки на представление должно создать диалоговое окно (взятие нескольких параметров в его конструкторе), который обработает некоторую логику и eventally возвратит результат вызывающей стороне (наряду с результатами всей логики, которую это вычислило).

Возможно, я неправ при том, что все еще посмотрел на это с точки зрения Windows Forms, но я знаю точно, что я хочу сделать, и я хочу идеально сделать это с помощью WPF и MVVM. Я пытаюсь сделать эту работу для проекта и в конечном счете не хочу должным быть возвращаться к ванильному WPF, чтобы заставить его работать.

1
задан Richard W 28 April 2010 в 00:10
поделиться

2 ответа

Вы можете это сделать. Просто создайте экземпляр page / usercontrol / window и вызовите instance.ShowDialog () .

Вот мои шаблоны T4 для создания модели представления / представления с сообщениями о закрытии окна и другими трюками.

0
ответ дан 3 September 2019 в 00:58
поделиться

Я нарушил правила реализации диалогового окна, но попытался свести его к минимуму. У меня есть метод OpenDialog в моей модели BaseViewModel:

public void OpenDialog(DialogViewModel model)
{
    this.MessengerInstance.Send<DialogViewModel, MainWindow>(model);
}

И в моем MainWindow:

Messenger.Default.Register<DialogViewModel>(this, model =>
        {
            // Instantiate the dialog box
            var dlg = new DialogWindow();
            // Configure the dialog box
            dlg.Owner = this;
            dlg.Content = model;
            // Open the dialog box modally 
            dlg.ShowDialog();
        });

Таким образом, у меня есть только слабая связь между моей моделью просмотра и моим MainView. Вы можете сделать то же самое для закрытия, моя BaseDialogViewModel есть метод:

public void CloseDialog()
    {
        this.MessengerInstance.Send<PopUpAction, DialogWindow>(PopUpAction.Close);
    }

(PopupAction - это просто перечисление), и мой DialogWindow регистрирует это:

Messenger.Default.Register<PopUpAction>(this, action =>
        {
            switch (action)
            {
                case PopUpAction.Close:
                    this.Close();
                    break;
            }
        });

Вы также можете оставить получателя при отправке, чтобы класс представления не попал в модель представления, но в любом случае я думаю, что это приемлемое решение :)

2
ответ дан 3 September 2019 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: