使用两个视图并在视图之间切换
Posted
技术标签:
【中文标题】使用两个视图并在视图之间切换【英文标题】:Using Two Views and switch between Views 【发布时间】:2015-10-25 18:18:25 【问题描述】:我看到了这个link 的例子,如何在两个视图之间切换。最简单的解决方案,非常适合我的应用程序 - 我也只有两个视图。
所以我们有一个父视图(MainWindow)和两个子视图。父视图具有专用的两个按钮,用于在位于“DockPanel”中的这两个视图(“第一视图”和“第二视图”)之间切换。
我的问题是如何使用“第一个视图”中的任何按钮切换到第二个视图和“第二个视图”按钮返回到“第一个视图”。我想要的是摆脱 DockPanel 并使用 View 中的按钮。
请提供建议,如何做到这一点。如果有任何问题请询问。谢谢!
【问题讨论】:
【参考方案1】:您可以使用来自每个子视图模型的事件来指示父视图更改视图。因此,在下面的代码中,在 View1(绑定到 ViewModel1)上按下了 ButtonOnViewModel1Command,这会引发 SwitchViewModel2Request 事件。 MainViewModel 订阅此事件并将 CurrentViewModel 集合切换到 ViewModel2。您可以在 ViewModel2 上执行相同的操作以切换回 ViewModel1。
public class MainViewModel
private ViewModel1 _viewModel1 = new ViewModel1();
private ViewModel2 _viewModel2 = new ViewModel2();
public MainViewModel()
//event from ViewModel1
_viewModel1.SwitchViewModel2Request += NavigateToView2;
//switch View to ViewModel2
private void NavigateToView2(object sender, EventArgs e)
CurrentViewModel = _viewModel2;
public class ViewModel1
public ViewModel1()
ButtonOnViewModel1Command = new RelayCommand(Button1Method);
//some button on child view 1
public RelayCommand ButtonOnViewModel1Command get; set;
private void Button1Method(object obj)
OnSwitchViewModel2Request();
//event that MainViewModel will subscribe to
public event EventHandler SwitchViewModel2Request = delegate ;
private void OnSwitchViewModel2Request()
SwitchViewModel2Request(this, EventArgs.Empty);
【讨论】:
【参考方案2】:由于您使用的是 MVVM light,因此您应该考虑使用信使系统 (Good tutorial here)。一种简单的方法是在第一次查看时发送 NotificationMessage,如下所示:
Messenger.Default.Send<NotificationMessage>(new NotificationMessage("GotoSecondView"));
然后在您的主窗口中,您将按如下方式注册接收它:
Messenger.Default.Register<NotificationMessage>(this, NotificationReceived);
后跟一个函数来处理它们:
private void NotificationReceived(NotificationMessage message)
string notice = message.Notification;
switch (notice)
case "GotoSecondView":
ExecuteSecondViewCommand
break;
对另一个视图重复相同的想法并将其添加到您的开关中。然后您可以从任何地方触发,主视图将处理更改,而无需直接链接您的视图模型。
【讨论】:
对不起。我忘了提到与链接示例的唯一区别是:我不会使用 MVVM Light。对不起!感谢您的链接,无论如何我都会概述,也许有解决方案。谢谢! 理想情况下,您想使用我发布的内容。如果您想变得简单而不理想,那么只需在创建它们时将主窗口实例传递给第一个和第二个视图,并在其上有一个可以调用以更改视图的函数。 谢谢。我会试试的。以上是关于使用两个视图并在视图之间切换的主要内容,如果未能解决你的问题,请参考以下文章
layoutAnimation 在两个视图之间切换时会在 Android 上导致额外的蓝色背景