【发布时间】:2015-05-14 12:41:25
【问题描述】:
- 我的历史:
我正在开发一个 WPF 应用程序,它将在触摸屏上全屏运行。我的应用程序中的导航只能通过单击每个页面上的按钮(“返回”或“注销”)来完成。
这不是通用应用,但看起来很像。
-
项目假设:
- 应用程序将在 Windows 7 的触摸屏上以全屏模式运行。
- 我正在使用 Caliburn.Micro MVVM 框架。
问题和疑问:
我有 1 个窗口和 3 个 UserControl(和 ViewModels)Concept art
Window ShellView
UserControl LoginView
UserControl OrdersView
UserControl OrderDetailView
当应用程序启动时,我将 LoginView 设置为默认值并使用 CM Conductor ActivateItem 方法加载它,但我不知道如何从 UserControl 设置另一个 View,如 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 发送事件(但现在我不知道如何实现)
问题:在这种情况下处理导航的最佳方式是什么?
- 应用架构:
外壳视图
<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?
}
}
}
【问题讨论】:
标签: c# wpf mvvm caliburn.micro