Caliburn Micro - 同时显示屏幕

Caliburn Micro - Show Screens simultaniously

我知道如果我执行以下操作,我可以切换屏幕:

ShellViewModel.cs

public class ShellViewModel : Conductor<object>.Collection.OneActive
{
  public void ShowFirstScreen()
  {
    ActivateItem(new FirstViewModel());
  }

  public void ShowSecondScreen()
  {
    ActivateItem(new SecondViewModel());
  }

}

ShellView.xaml 对于 OneActive

<ContentControl x:Name="ActiveItem" />

但我想同时显示这些屏幕。因此,当从 OneActive 更改为 AllActive 时,屏幕不再可见。

我知道如果我使用 ItemsControl 就可以显示这些屏幕

ShellView.xaml AllActive

<ItemsControl ItemsSource="{Binding Path=Items}">
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <ContentControl cal:View.Model="{Binding}"/>
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>

但我想将它们随机放置在我的 ShellView.xaml 中。

怎么做?

如何访问它们?我想将它们像 UserControls 一样放在我的 ShellView.xaml.

<Grid>
<ContenControl x:Name="Item1 or even the ViewModel name"/>
<ContenControl x:Name="Item2 or even the ViewModel name"/>
...
</Grid>

在你的shellview.xaml

<ContentControl x:Name="NameOfViewModel" />

在你的ShellViewModel.cs

 public NameOfViewModel NameOfViewModel {
   get;set;  // auto for brevity 
 }

在您选择的 OnInitialized()、OnActivated() 或 Ctor 中实例化视图模型...基本上,如果 ContentControl 名称与 属性 匹配,一旦视图模型被实例化,您将获得一个屏幕。没有匹配没有屏幕。