ben*_*man 8 c# wpf mvvm mvvm-light
我正在制作一个使用MVVM光框架的WPF应用程序.
我要做的是在视图中有一个登录表单,当用户按下该视图中的按钮时,它会为附加的ViewModel启动LoginCommand.从那里我想要启动一个新窗口来保存应用程序的其余部分,或者只是从同一个窗口切换视图.
目前我有它,所以有一个名为MainView的视图,其内部控件内部绑定到View1.但是,要切换到View2,我需要在MainView上放置此按钮,而不是在它所属的View1中.
有什么建议?
通常我会这样做两种方式之一:
如果登录窗口是启动应用程序之前需要的一次性事物,我将把它放在对象的OnStartup()方法中Application
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
// Login
var login = new LoginDialog();
var loginVm = new LoginViewModel();
login.DataContext = loginVm;
login.ShowDialog();
if (!login.DialogResult.GetValueOrDefault())
{
// Error is handled in login class, not here
Environment.Exit(0);
}
// If login is successful, show main application
var app = new ShellView();
var appModel = new ShellViewModel();
app.DataContext = viewModel;
app.Show();
}
Run Code Online (Sandbox Code Playgroud)
我通常这样做的另一种方式是通过一个ShellViewModel或ApplicationViewModel处理我所有窗口管理.此方法用于DataTemplates定义每个屏幕,并使用a ContentControl作为占位符,用于ShellView或中的当前屏幕ApplicationView.
我通常与某种形式的,如微软棱镜的的事件系统结合本EventAggregator,所以它可以侦听特定类型的消息,如OpenWindow或CloseWindow消息.如果您有兴趣,我有一篇关于ViewModel之间的沟通的博客文章 ,可以让您更好地了解事件系统的外观.
例如,我ShellViewModel可以通过显示启动LoginViewModel(一个DataTemplate是用来告诉WPF绘制LoginViewModel用LoginView),它会订阅接收类型的消息SuccessfulLogin.一旦LoginViewModel广播的SuccessfulLogin消息时,ShellViewModel将关闭LoginViewModel并用替换它ApplicationViewModel.您可以在我的MVVM导航文章中看到这样的示例
| 归档时间: |
|
| 查看次数: |
2589 次 |
| 最近记录: |