2013-05-03 91 views
1

我有两个视图调用它们A和B.当用户对A执行特定操作时,我希望它启动B.两个视图都应该保持打开状态。使用Caliburn.micro调用另一个ViewModel

A继承了Conductor,我试图调用ActivateItem,但视图B永远不会打开。

我错过了什么?这是使用Caliburn.micro调用另一个视图的正确方法吗?

+0

你想在另一个窗口启动B-view吗?或者你将在一个窗口中有多个屏幕? – 2013-05-03 20:04:25

+0

我想在另一个窗口中启动它。 A和B都应该显示在自己的窗口中。 – Kelly 2013-05-03 20:06:21

回答

3

好的,如果B视图应该在不同的窗口中,这是最简单的解决方案。我假设AViewModel是“壳”的视图模型:

public class AViewModel // : Screen - that's optional right here ;) 
{ 
    private readonly BViewModel bViewModel; 
    private readonly IWindowManager windowManager; 

    public AViewModel(BViewModel bViewModel, IWindowManager windowManager) 
    { 
     this.bViewModel = bViewModel; 
     this.windowManager = windowManager; 
    } 

    public void ShowB() 
    { 
     windowManager.ShowWindow(bViewModel); //If you want a modal dialog, then use ShowDialog that returns a bool? 
    } 
} 

和最简单的意见(AView):

<Button Name="ShowB" Content="Show another window"/> 

它会显示与BView新的窗口,当你点击一个按钮在AView

导体用于在一个窗口中显示多个屏幕(或换句话说,在一个屏幕上显示多个窗格)。有时它是OneActive(例如,当在WPF中实现导航时)或AllActive(当一次有多个屏幕可用时)。

Here's关于Caliburn.Micro的一些基础知识和该特定部分描述窗口管理器的一个很好的教程。

+0

谢谢,这给了我我需要的东西。该教程写得很好,应该也能帮上忙。 – Kelly 2013-05-03 20:23:20