Caliburn Micro Conductor.Collection.AllActive不起作用

时间:2018-06-28 07:16:46

标签: c# wpf xaml uwp caliburn.micro

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

已执行的步骤:

Conductor.Collection.AllActive的继承的MainHomeViewodel

1)创建的财产

public ExploreViewModel Explorer {
   get; private set;  
 }

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

<ContentControl x:Name="Explorer" />

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

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

执行上述代码后,其实例化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 );

        }
}

1 个答案:

答案 0 :(得分:3)

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());
    }
}

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

<Grid>
    <StackPanel>
        <ItemsControl x:Name="Items"></ItemsControl>
    </StackPanel>
</Grid>

子屏幕:

public class ChildViewModel : Screen
{
}

子视图:

<Grid>
    <Border Width="50" Height="50" BorderBrush="Red" BorderThickness="5"></Border>
</Grid>

编辑:关于评论中的讨论,这是如何使用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();
    }
}