我尝试使用带有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 );
}
}
答案 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();
}
}