Как мне перейти от одного вида к другому в Caliburn.Micro? - PullRequest
1 голос
/ 01 марта 2011

Итак, позвольте мне сказать это так.

У меня есть LogInViewModel и LogInView. В ViewModel есть метод Login(), который вызывается, если пользователь нажимает кнопку в представлении. Теперь я хочу, чтобы панель показала, был ли вход успешным. Как мне это сделать? Я не могу найти четкий ответ на этот вопрос в документации.

Ответы [ 2 ]

3 голосов
/ 01 марта 2011

Я предполагаю, что ваша панель инструментов - это, по сути, ваша оболочка.В этом случае вы можете загрузить LoginViewModel и в методе Login, после успешного входа в систему, вы можете показать DashboardViewModel и закрыть LoginViewModel, используя Caliburn.Micro WindowManager.

Что-то вроде (с использованием MEF):

Bootstrapper.cs

public class Bootstrapper : Caliburn.Micro.Bootstrapper<ILoginViewModel>
{
  ...
}

LoginViewModel.cs

public class LoginViewModel : Screen, ILoginViewModel
{
    private readonly IWindowManager windowManager;

    private readonly IDashboardViewModel dashboardViewModel;

    [ImportingConstructor]
    public LoginViewModel(IWindowManager windowManager, IDashboardViewModel dashboardViewModel)
    {
        this.windowManager = windowManager;
        this.dashboardViewModel = dashboardViewModel;
    }

    public void Login()
    {            
        // if login success...
        this.windowManager.ShowDialog(this.dashboardViewModel);
        this.TryClose();
    }
}
2 голосов
/ 01 марта 2011

Я только что добавил очень простой пример SL4-проекта входа в систему в своем «лабораторном репозитории» для Caliburn.Micro.

https://github.com/jenspettersson/Caliburn.Micro.Labs/tree/master/src/Login

Он использует класс Show, который использует Роб Айзенбергв его примере «Game Library» для переключения между представлениями.

В методе Login () он говорит моей Shell (вашей панели управления?) показать мой LoginResultViewModel и устанавливает сообщение с результатом входа в систему.

yield return Show.Child<LoginResultViewModel>().In<IShell>().Configured(c => c.ResultMessage = "Successfully logged in!");

Проверьте код в моем репозитории github.

В последнее время я не использовал Caliburn.Micro, поэтому я ни в коем случае не эксперт, но этот способ работает для меня.

// J

Редактировать: Это ответ о том, как перемещаться между представлениями, если вы хотите показать «всплывающее окно» для отображения, если вход был успешным, перейдите к другим рекомендациям.

...