Как закрыть пользовательский контроль из модели представления, которая была открыта как окно в шаблоне wpf mvvm? - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь закрыть пользовательский контроль из модели представления, которая была открыта как окно / диалоговое окно в команде кнопки модели представления.

Открыть пользовательский контроль в виде окна / диалогового окна: MainWindow >> Кнопка >> Команда через MainWindowViewModel >> Показать пользовательский контроль в виде окна / диалогового окна

Закрыть пользовательский контроль, открытый на предыдущем шаге: ????

Также мне интересно, нарушаю ли я шаблон mvvm, поэтому, если кто-то может предоставить мне некоторые правильные примеры, так как я довольно новичок в шаблоне wpf MVVM.

кнопка главного окнакоманда в viewmodel:

private void ExecuteOtherMethod(object parameter)
    {


        registerWindow win = (registerWindow)Application.Current.MainWindow;
        //win.pp.IsOpen = true;
        win.bankRectangle.Visibility = Visibility.Visible;
        Window window = new Window

        {

            WindowStyle = WindowStyle.None,
            SizeToContent = SizeToContent.WidthAndHeight,
            ResizeMode = ResizeMode.NoResize,
            Content = new otherOptionsView()
        };
        window.Owner = win;
        window.WindowStartupLocation = WindowStartupLocation.CenterOwner;
        window.ShowDialog();


    }

usercontrol viewmodel для закрытия usercontrol:

 private void ExecuteMethod(object parameter)
    {

        //otherOptionsView newview = new otherOptionsView();
        //Window parentWindow = (Window)newview.Parent;
        //parentWindow.Close();
        var displayViews = App.Current.Windows.OfType<otherOptionsView>();
        if (displayViews.Any())
            displayViews.First().Close();
        registerWindow win = (registerWindow)Application.Current.MainWindow;
        win.bankRectangle.Visibility = Visibility.Collapsed;


    }

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Для управления окнами вы всегда можете использовать пакет nuget 'MvvmDialogs', он специально разработан для помощи вам в отношениях между родительским и дочерним окнами и имеет довольно большую коллекцию примеров приложений.

0 голосов
/ 25 мая 2018

Один из способов - вообще не иметь окна (если оно не является главным окном), как в принятом ответе здесь Обработка диалогов в WPF с MVVM .Имейте в своем окне свободно плавающий пользовательский элемент управления и привязывайте его видимость к логическому значению в модели представления.

Вы также можете вызвать событие и обработать его в представлении, как в WPF (MVVM): Закрытиепредставление из Viewmodel? .

Другой способ - использовать мессенджер ViewModel или посредник.Это требует кода в представлении и обычно не предназначено для связи между моделью представления и представлением.Вы регистрируете представление в классе-посреднике и прослушивает этот конкретный «закрытый» запрос, отправленный моделью представления через посредника.Как и в Использование MVVM Light Messenger для передачи значений между моделью представления

Также, если вы действительно пытаетесь закрыть главное окно, почему бы не использовать Application.Current.Shutdown()?

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