Caliburn Micro Conductor.Collection.AllActive 不工作

Vya*_*Dev 1 c# wpf xaml caliburn.micro uwp

我尝试使用 Caliburn Micro 和 Conductor.Collection.AllActive 在应用程序中激活多个窗口

步骤如下:

从 Conductor.Collection.AllActive 继承 MainHomeViewodel

1)创造财产

public ExploreViewModel Explorer {
   get; private set;  
 }
Run Code Online (Sandbox Code Playgroud)

2)创建ContentControl,名称为属性名称

<ContentControl x:Name="Explorer" />
Run Code Online (Sandbox Code Playgroud)

3)激活具有属性的视图模型

Explorer = new ExplorerViewModel();
ActivateItem(Explorer );
Run Code Online (Sandbox Code Playgroud)

执行上述代码后,它会实例化 ExplorerViewModel 但不会转到 View 的构造函数或显示 View 。

上述实施有任何问题,或者我需要做更多事情来激活项目吗?

请帮忙!

谢谢。

编辑

    public class MainHomeWindowViewModel : Conductor<IScreen>.Collection.AllActive
    {
      protected override void OnInitialize()
      {
       base.OnInitialize();
       ShowExplorer();
       }
        public void ShowExplorer()
        {

            Explorer = new ExplorerViewModel();
            ActivateItem(Explorer );

        }
}
Run Code Online (Sandbox Code Playgroud)

FCi*_*Cin 6

Conductor.Collection.AllActive使用Items财产。如果你想同时显示多个屏幕,你必须将它们添加到Items属性中。

然后,因为您的视图存储在Items属性中,所以您希望将视图绑定到Items. 这是一个例子:

导体:

public class ShellViewModel : Conductor<IScreen>.Collection.AllActive
{
    public ShellViewModel()
    {
        Items.Add(new ChildViewModel());
        Items.Add(new ChildViewModel());
        Items.Add(new ChildViewModel());
    }
}
Run Code Online (Sandbox Code Playgroud)

导体视图(注意,因为我们显示了我们想要使用的项目集合,而ItemsSource不是ContentControl):

<Grid>
    <StackPanel>
        <ItemsControl x:Name="Items"></ItemsControl>
    </StackPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)

子屏:

public class ChildViewModel : Screen
{
}
Run Code Online (Sandbox Code Playgroud)

儿童视图:

<Grid>
    <Border Width="50" Height="50" BorderBrush="Red" BorderThickness="5"></Border>
</Grid>
Run Code Online (Sandbox Code Playgroud)

编辑:关于评论中的讨论,以下是如何用于IWindowManager显示多个窗口:

public class ShellViewModel : Screen
{

    public ShellViewModel(IWindowManager windowManager)
    {
        var window1 = new ChildViewModel();
        var window2 = new ChildViewModel();

        windowManager.ShowWindow(window1);
        windowManager.ShowWindow(window2);

        window1.TryClose();
    }
}
Run Code Online (Sandbox Code Playgroud)