MVVM - как показать вид? - PullRequest
       10

MVVM - как показать вид?

3 голосов
/ 20 августа 2010

Мое приложение MVVM запущено с App.xaml.cs

Здесь я создаю главное окно.У него есть рамка.Здесь я поставил LoginView.

Имеется кнопка «Войти».У меня есть команда, которая проверяет и делает логин.

Этот код у меня в LoginViewModel.Если все в порядке - я должен показать следующий вид.Как я могу это сделать?

App.xaml.cs

        private void OnStartup(object sender, StartupEventArgs e)
        {
            LoginViewModel loginVM = new LoginViewModel();    
            MainView mainView = new MainView();            
            LoginView loginView = new LoginView();
            loginView.DataContext = loginVM;
            mainView.Frame.Content = loginView;
            mainView.Show();

        }

LoginViewModel.cs

// this method calls by binding after Click Login in LoginView
    private void Login()
        {
            //TODO: Realize it
            if (LoginModel.Login("User1", "Password"))
            {
               // HERE I SHOULD CLOSE LOGINVIEW AND SHOW NEXT VIEW
            }
        }

Как и где я должен показать все необходимые виды?Я использую сейчас WPF MVVM Toolkit.

Ответы [ 2 ]

2 голосов
/ 20 августа 2010

В такой ситуации ваша стартовая форма может быть вашей основной программой, а Логин - это диалоговое окно.Если диалоговое окно не работает, выйдите из программы.Если это удастся, продолжайте загрузку главной формы.

private void OnStartup(object sender, StartupEventArgs e)
{
    LoginViewModel loginVM = new LoginViewModel(); 
    LoginView loginView = new LoginView();    
    loginView.DataContext = loginVM;  
    loginView.ShowDialog(); // Change this to a ShowDialog instead of Show     

    if (!login.DialogResult.GetValueOrDefault())
    {
        // Should probably handle error in login class, not here");
        Environment.Exit(0);
    }

    // This code will never get reached if Login fails
    MainView mainView = new MainView();   
    mainView.Frame.Content = loginView;
    mainView.Show(); // Change this to a ShowDialog instead of Show

}
0 голосов
/ 20 августа 2010

Я ничего не знаю о MVVM Toolkit, но простой способ сделать это состоял в том, чтобы делегат сделал это, что-то вроде: (упрощенный код)

private void OnStartup(object sender, StartupEventArgs e) 
{ 
    LoginViewModel loginVM = new LoginViewModel();

    loginVM.ShowNextScreen += () => {
        SomeOtherVM nextVM = new SomeOtherVM();
        nextVM.ShowForm();
    }

    // ...
} 

Итак, у вас есть виртуальная машина ShowNextScreen, которая вызывает этот код.

У меня есть небольшое приложение в Google Code , которое делает это (оно также касается только одной открытой формы, обработки ошибок и т. Д.). Обратите внимание, что в этом случае именно ViewModel отвечает за открытие представления.

Но это будет быстро усложняться, для любого разумного размера приложения вы хотели бы разделить эту функциональность на некий «контроллер приложений», который имел дело с открытием экранов, навигацией и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...