- 我的历史:
我正在开发一款WPF应用程序,将在触摸屏上全屏运行。在我的应用程序中,导航只能通过每个页面上的按钮(“返回”或“注销”)来完成。
这不是通用应用程序,但它看起来像。
项目假设:
- 应用程序将在Windows 7上的触摸屏上以全屏模式运行。
- 我正在使用Caliburn.Micro MVVM框架。
问题和疑问:
我有1个窗口和3个UserControl(以及ViewModels)概念艺术
Window ShellView
UserControl LoginView
UserControl OrdersView
UserControl OrderDetailView
当应用程序启动时,我将LoginView设置为默认视图,并使用CM Conductor ActivateItem方法加载它,但我不知道如何从UserControl设置另一个视图,例如LoginView。
我已经阅读了this question,但这并不涵盖我的情况,以及this answer,但对我来说太难理解了。
我的想法是:
在ShellViewModel中创建静态方法,例如:
ShellViewModel
public static void setOrdersView() {
ActivateItem(new OrdersViewModel());
// Error : An object reference is required for the non-static field, method, or property 'Caliburn.Micro.ConductorBase<object>.ActivateItem(object)
}
ShellViewModel.setOrdersView();
- 在ShellViewModel中创建监听器并从子ViewModel发送事件(但现在我不知道如何实现)
问题:在这种情况下处理导航的最佳方法是什么?
- 应用程序架构:
ShellView
<Window>
<ContentControl x:Name="ActiveItem" />
</Window>
ShellViewModel
public class ShellViewModel : Conductor<object>, IShell
{
public ShellViewModel()
{
LoadDefault();
}
public void LoadDefault()
{
ActivateItem(new LoginViewModel());
}
}
登录视图
<UserControl>
<Button x:Name="Login" />
</UserControl>
登录视图模型
public class LoginViewModel : PropertyChangedBase
{
public void Login() {
if (LoginManager.Login("User", "Password")) {
// How to redirect user to OrdersView?
}
}
}