Отображение разного содержимого в одном окне WPF + MVVM

Nevereverlie

Добрый вечер. Собственно, вопрос заключается в том , как в одном окне отображать разное содержимое К примеру то же приложение киви десктопное. Вводишь пин и там уже совершенно другое отрисовывается

Вообще узнаю для того , чтобы понять: как сделать так , чтоб при запуске десктоп приложения проверялось авторизован ли пользователь, если нет - то будет отображена форма авторизации, иначе будет отображено основной интерфейс программы. Я профан в это деле и только начал познавать Wpf + mvvm. И желательно как можно подробнее описать всё это дело Не кидайтесь тапками, пожалуйста :)

Приложение Киви:

1 ответ

Nevereverlie

Очень просто. Возьмите ContentPresenter или ContentControl.

Положите контент окна, каким он должен быть в начале, в первый UserControl (пусть будет AuthorizationPresentation), а контент, который должен появиться потом — во второй UserControl (MainPresentation).

Заведите себе два VM-класса: AuthorizationVM (для авторизации) и MainVM (для основного контента), а также RootVM:

class RootVM : INotifyPropertyChanged
{ object currentContentVM; public object CurrentContentVM { get => currentContentVM; set => /* тут имплементация INotifyPropertyChanged */ }
}

Ваш XAML будет выглядеть так:

<window ...=""> <window.resources> <datatemplate datatype="{x:Type vm:AuthorizationVM}"> <view:authorizationpresentation> </view:authorizationpresentation></datatemplate> <datatemplate datatype="{x:Type vm:MainVM}"> <view:mainpresentation> </view:mainpresentation></datatemplate> </window.resources> </window>

Установите DataContext'ом окна экземпляр RootVM.

Теперь вы можете регулировать, какой контент показывается в окне, устанавливая в RootVM свойство CurrentContentVM. Если записать туда экземпляр AuthorizationVM, будет показан AuthorizationPresentation, а если MainVM — то MainPresentation.

Всё!

licensed under cc by-sa 3.0 with attribution.