В WPF у вас есть два способа (из коробки) для «показа» / «закрытия» представлений. Первый - это просто, показывая окно или диалог с помощью методов .Show()
или .ShowDialog()
, и их можно закрыть с помощью метода .Close()
. В этом случае вы можете использовать класс MVVMLight Messenger
, как вы упомянули, для отправки сообщений show / close в представление в развязанном виде. Вот пример с «закрытием».
В ViewModel:
CloseTheView()
{
Messenger.Default.Send(new CloseTheViewMessage);
}
в коде вашего представления:
//Constructor
public TheView()
{
...
Messenger.Default.Register<CloseTheViewMessage>( () => this.Close() );
}
Как вы можете видеть, это включает в себя некоторый код в файле code-behind, но это не страшно, так как это всего лишь одна строка функциональности.
Второй подход заключается в использовании Navigation Framework (который доступен как для WPF, так и для Silverlight). Вы определяете «Оболочку», которая является основной Window
(или UserControl
), вы помещаете frame
внутри нее, и вы делаете ваши другие представления наследуемыми от Page
, а затем инициируете навигацию из вашей ViewModel используя экземпляр NavigationService
, связанный с Frame
(или непосредственно тот, который связан с самой страницей).
Надеюсь, это поможет:)