Caliburn微显示屏幕同时显示

本文关键字:显示 屏幕 显示屏 Caliburn | 更新日期: 2023-09-27 18:12:21

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

ShellViewModel.cs

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

ShellView。xaml for OneActive

<ContentControl x:Name="ActiveItem" />

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

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

ShellView。

<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>

Caliburn微显示屏幕同时显示

在你的shellview.xaml

<ContentControl x:Name="NameOfViewModel" />

在你的ShellViewModel.cs

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

在你选择的OnInitialized(), OnActivated()中实例化视图模型,或者在…基本上,如果ContentControl名称匹配一个属性,你会得到一个屏幕,一旦视图模型被实例化。