使用Caliburn.micro调用另一个ViewModel

本文关键字:另一个 ViewModel 调用 micro Caliburn 使用 | 更新日期: 2023-09-27 18:11:58

我有两个视图,分别叫它们A和b。当用户在A上执行一个特定的操作时,我希望它启动b。两个视图都应该保持打开状态。

A继承了导体,我试图调用ActivateItem,但视图B从未打开。

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

使用Caliburn.micro调用另一个ViewModel

好,如果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"/>

单击AView上的按钮,将显示BView的新窗口。

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

这里有一个关于一些Caliburn的很好的教程。