MVVM Foundation: Как закрыть окно приложения из ViewModel

StackOverflow https://stackoverflow.com/questions/3791677

  •  05-10-2019
  •  | 
  •  

Вопрос

я использую Фонд MVVM Но я думаю, что это довольно прямое и не очень специфичное. Моя настройка выглядит следующим образом:

  • StartViewModel - имеет выходную компанию, которая возвращает релайомманд / ICommand

    public ICommand ExitCommand {
        get { return _exitCommand ?? (_exitCommand = new RelayCommand(() => MessageBox.Show("Hello World"))); }
    }
    public RelayCommand _exitCommand;
    
  • StartView (User Control) имеет кнопку, привязанную к EXITCOMMEND

    <Button Content="Exit" Command="{Binding ExitCommand}" />  
    
Это было полезно?

Решение

Во-первых, читайте как можно больше желудка на MVVM, например Приложения WPF с образцом дизайна просмотра моделей-просмотра Model-ViewModel на MSDN. После того, как вы понимаете основные принципы, ведущие его, ответ кажется более разумным.

По сути, вы хотите сохранить свой вид (UI) и ViewModel (по существу абстрактные пользовательские пользователи, но и абстрактные модели) отдельный и отделен. Показаны окно сообщения или закрытие окна, следует учитывать конкретную детализацию UI и, следовательно, реализовано в представлении, или в случае окна сообщения, которая, как правило, доступна через «Сервис».

Что касается ViewModel, это достигается с использованием Инверсия контроля (МОК). Возьмите пример коробки сообщения выше. Вместо того, чтобы показать саму окна сообщения, требуется зависимость от IMESSAGEBAGESERVICE, который имеет показатель Show и ViewModel, которые вместо этого - делегирование ответственности. Это может быть сделано дальше, используя Внедрение зависимости (Ди) контейнеры.

Другим подходом, используемым для закрытия окна «Вид», может быть для ViewModel, чтобы выставить событие, называемое, например, запрошенную кнопку (как в статье MSDN), что представление подписывается. Тогда ViewModel поднимет событие, когда он хочет, чтобы соответствующий вид / окно закрыть; Предполагается, что что-то остальное слушает и возьмет на себя ответственность и на самом деле делает это.

Другие советы

Вы можете реализовать CloseeVent в вашем StartViewModel. В вашем StartView вы должны зарегистрировать этот CloseeVent. Когда вы поднимаете свой CloseeVent с VM, то ваше представление распознает, что он должен закрыть свое приложение / окно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top