使用Caliburn.micro调用另一个ViewModel

时间:2013-05-03 19:49:15

标签: c# wpf caliburn.micro

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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的一些基础知识的精彩教程,该特定部分描述了Window Manager。