mvvm-Light: показать другой вид из моей текущей модели и закрыть вид из моей модели? - PullRequest
1 голос
/ 03 мая 2011

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

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

У кого-нибудь есть хороший пример того, что мне нужно сделать здесь?

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

Любая помощь действительно ценится

Спасибо

1 Ответ

3 голосов
/ 04 мая 2011

В 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 (или непосредственно тот, который связан с самой страницей).

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

...