Vya*_*Dev 1 c# wpf xaml caliburn.micro uwp
我尝试使用 Caliburn Micro 和 Conductor.Collection.AllActive 在应用程序中激活多个窗口
步骤如下:
从 Conductor.Collection.AllActive 继承 MainHomeViewodel
1)创造财产
public ExploreViewModel Explorer {
get; private set;
}
Run Code Online (Sandbox Code Playgroud)
2)创建ContentControl,名称为属性名称
<ContentControl x:Name="Explorer" />
Run Code Online (Sandbox Code Playgroud)
3)激活具有属性的视图模型
Explorer = new ExplorerViewModel();
ActivateItem(Explorer );
Run Code Online (Sandbox Code Playgroud)
执行上述代码后,它会实例化 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 );
}
}
Run Code Online (Sandbox Code Playgroud)
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());
}
}
Run Code Online (Sandbox Code Playgroud)
导体视图(注意,因为我们显示了我们想要使用的项目集合,而ItemsSource不是ContentControl):
<Grid>
<StackPanel>
<ItemsControl x:Name="Items"></ItemsControl>
</StackPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)
子屏:
public class ChildViewModel : Screen
{
}
Run Code Online (Sandbox Code Playgroud)
儿童视图:
<Grid>
<Border Width="50" Height="50" BorderBrush="Red" BorderThickness="5"></Border>
</Grid>
Run Code Online (Sandbox Code Playgroud)
编辑:关于评论中的讨论,以下是如何用于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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1646 次 |
| 最近记录: |