c# - Caliburn Micro Conductor.Collection.AllActive 不工作

标签 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)激活带有属性的viewmodel

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

        }
}

最佳答案

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

然后,由于您的 View 存储在 Items 属性中,您希望将 View 绑定(bind)到 Items。这是一个例子:

指挥:

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

Conductor View (请注意,因为我们显示了我们要使用 ItemsSource 而不是 ContentControl 的项目集合):

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

子屏幕:

public class ChildViewModel : Screen
{
}

subview :

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

关于c# - Caliburn Micro Conductor.Collection.AllActive 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51076851/

相关文章:

c# - DataGridViewComboBox - 如何允许任何值?

c# - 测试类中的对象实例化

c# - ToolTip 用于显示集合中项目的索引。 C# WPF MVVM

c# - 查找文本 block /文本的高度

c# - 单击按钮后定义图像源 Windows 10 UWP,XAML C#

c# - 为什么 type.getConstructor 将类型数组作为参数?

C# 设置桌面应用程序以查询远程服务器的策略

c# - WPF TabControl 启动时没有选定的项目

wpf - 如何单击文本框(或标签)来切换复选框

wpf - 已在编译时检测 XAML 中损坏的绑定(bind)