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

У меня есть еще одна настройка просмотра, и я готов и жду с ее моделью просмотра. Моя RelayCommand прибывает в мою "Текущая" модель просмотра. Как лучше всего показать новый вид из моей текущей модели просмотра?

Я читал и, похоже, мне нужно использовать Messenger для отправки сообщения из моей модели просмотра на ??? моя новая модель просмотра, связанная с моим представлением, которое я хочу показать? Но как мне показать View?

Также есть способ поддержать закрытие представления из модели просмотра? Интересно, привносит ли mvvm-light что-нибудь еще в таблицу - т.е. триггеры, заставляющие модель просмотра закрывать представление?


person Martin    schedule 03.05.2011    source источник
comment
вы используете WPF или silverlight?   -  person AbdouMoumen    schedule 03.05.2011
comment
в настоящее время это WPF, но я надеялся на такую ​​же функциональность для silverlight   -  person Martin    schedule 04.05.2011


Ответы (1)


В WPF у вас есть два способа (из коробки) для «показа» / «закрытия» представлений. Первый - просто показать окно или диалог с помощью методов .Show() или .ShowDialog(), и их можно закрыть с помощью метода .Close(). В этом случае вы можете использовать класс MVVMLight Messenger, как вы упомянули, для отправки сообщений о показе / закрытии в представление несвязанным способом. вот пример с «закрытием».

В ViewModel:

CloseTheView()
{
    Messenger.Default.Send(new CloseTheViewMessage);
}

в коде вашего представления:

//Constructor
public TheView()
{
    ...
    Messenger.Default.Register<CloseTheViewMessage>( () => this.Close() );
}

как видите, здесь задействован некоторый код в файле кода программной части, но в этом нет ничего страшного, поскольку это всего лишь одна функциональная строка.

Второй подход - использовать Navigation Framework (который доступен как для WPF, так и для Silverlight). Вы определяете "Shell", который является основным Window (или UserControl), вы помещаете frame внутрь него, и вы делаете другие ваши представления наследуемыми от Page, а затем инициируете навигацию из вашей ViewModel, используя экземпляр NavigationService, связанный с Frame (или непосредственно связанный с самой страницей).

Надеюсь это поможет :)

person AbdouMoumen    schedule 04.05.2011