2009-09-23 3 views
9

С MVVM и WPF, что было бы хорошим/простым способом справиться с открытием и закрытием новых окон и диалогов? Открытие и закрытие должны управляться правом ViewModel? Но ViewModel не должен знать о представлении ...Как обрабатывать открытие и закрытие новых окон с помощью MVVM?

+0

Я ответил очень похожий вопрос в [этот пост] (http://stackoverflow.com/a/15512972/385995). –

ответ

6

Обычно для этого я использую интерфейсы. Например, если я хочу отредактировать запись в отдельном окне, у меня есть интерфейс IEditingProvider <TViewModel>, который я могу реализовать где-то еще, а затем передать ссылку на интерфейс конструктора моего ViewModel. EditingProvider может просто сделать что-то вроде этого:

class MyRecordEditingProvider: IEditingProvider<MyRecordViewModel> 
{ 
    // Implementation of generic interface method 
    public void Edit(MyRecordViewModel model) { 
     EditWindow edit = new EditWindow(); 
     edit.DataContext = model; 
     edit.ShowDialog(); 
    } 
} 
+0

Как вы поддерживаете EditingProviders, которые доступны (определенной части) вашего приложения, и как вы извлекаете правильный экземпляр, который вы в конце концов перейдете к конструктору ViewModel? Полагаю, что это не все жестко, но развязано? – bitbonk

+0

Да, это развязано. Фактически я использую платформу Injection Dependency (составной блок приложений от Microsoft) для сопоставления общих интерфейсов с реализациями. В настоящее время я делаю это в коде, но Unity Container также можно настроить с помощью файла конфигурации. – Botz3000

+0

У вас есть MVVM-совместимое решение для установки свойства 'Owner' вашего EditWindow, прежде чем вызывать ShowDialog? Если Владелец не установлен (например, в MainWindow), модальный диалог может идти за основным окном, которое довольно странно и сбивает с толку с точки зрения пользователя. – Slauma

Смежные вопросы