2011-03-01 3 views
1

Так что позвольте мне сказать так.Как перейти от одного вида к другому в Caliburn.Micro?

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

ответ

3

Я предполагаю, что ваша приборная панель - это, по сути, ваша оболочка. В этом случае вы можете выполнить загрузку 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(); 
    } 
} 
+0

Я еще не думал об этом, но теперь, когда вы упоминаете, что это делает панель инструментов, оболочка, вероятно, решит большинство проблем, которые у меня есть. –

+0

Извините, но сейчас я заметил что-то не так. У меня нет простого метода Show на моем оконном менеджере. –

+2

Обновлено. С Silverlight у вас есть ShowDialog, ShowNotification и ShowPopup. ShowDialog отображает модальное диалоговое окно для указанной модели представления, поэтому вам может потребоваться переключить логику и загрузите свой DashboardViewModel, а затем, если пользователь не будет аутентифицирован, отобразите LoginViewModel с помощью метода WindowManager.ShowDialog (чтобы он сидел на верхней части панели управления). Пользователь не сможет пройти этот модальный экран до тех пор, пока он не войдет в систему, где вы можете просто закрыть диалоговое окно. – devdigital

2

Я просто добавил очень простой пример Войти проект SL4 в моем " лабораторный репозиторий "для Caliburn.Micro.

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

Он использует шоу класс, Rob Eisenberg использует в своем примере «Game Library» для переключения между режимами просмотра.

В методе Login() он сообщает моей оболочке (вашей панели?), Чтобы показать мою модель LoginResultViewModel и задает сообщение о результате входа в систему.

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

Проверьте код в моем реестре github.

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

// J

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

+0

Спасибо, это определенно окажется полезным позже. –

Смежные вопросы