Отображение разного содержимого в одном окне 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.