WPF这份原稿.微/ mvvm导航
本文关键字:mvvm 导航 WPF | 更新日期: 2023-09-27 18:13:23
我正在构建一个项目,到目前为止我遇到的最大问题之一是导航。
我一直在寻找一段时间的例子,现在的口径。微/mvvm导航,但他们似乎都很长,我不能真正理解其中的大部分(初学者这里!)。
关于我的项目的一些信息:
我希望有一个外部窗口/外壳,与菜单链接/选项卡,根据在外壳的内部部分点击按钮打开页面,并能够从一个内打开更改页面。
我目前有:ShellViewModel.cs, MainViewModel.cs,我的模型,和我的视图。现在,所有我需要知道的是如何使MainViewModel加载在启动shellviewmodel(使用contentcontrol/frames…),以及如何从一个页面移动到另一个。
你也可以把它写成点,并给我一些有用的例子,我相信我可以从那里继续。如果可能的话,最好对进行详细的说明。
请阅读官方文档中有关导体和屏幕的内容。
作为一个简单的例子,您的ShellViewModel
可以是一个活动屏幕的Conductor
(即一次只有一个屏幕变为活动/非活动):
public class ShellViewModel : Conductor<IScreen>.Collection.OneActive
您可以将Conductor
的ActiveItem
设置为您希望当前处于活动状态的视图模型实例:
this.ActivateItem(myMainViewModel);
一个Conductor
类型的集合也提供了一个Items
类型的集合,你可以在实例化新窗口时填充它。这个Items
集合中的视图模型可能是那些当前未激活但尚未关闭的视图模型,您可以像上面那样使用ActivateItem
来激活它们。在ShellView
中使用ItemsControl
和x:Name="Items"
,可以很容易地创建打开窗口的菜单。
然后,要创建ShellView
,您可以使用ContentControl
并将其名称设置为与ActiveItem
属性和Caliburn相同。其余的由Micro来完成:
<ContentControl x:Name="ActiveItem" />
你可以通过覆盖OnActivate
/OnDeactivate
来响应MainViewModel
中的激活/停用
在ShellView中使用如下内容控件:
<ShellView xmlns:cal="http://caliburnproject.org/">
<StackPanel>
<Button Content="Show other view" cal:Message.Attach="ShowOtherView" />
<ContentControl cal:View.Model="{Binding Child}" />
</StackPanel>
</ShellView>
ShellViewModel:
public class ShellViewModel : Screen
{
private object Child;
public object Child
{
get{ return child; }
set
{
if(child == value)
return;
child = value;
NotifyOfPropertyChange(() => Child);
}
}
public ShellViewModel()
{
this.Child = new MainViewModel();
}
public void ShowOtherView()
{
this.Child = new FooViewModel();
}
}
这是一个非常基本的例子。但是正如你所看到的,你的ShellView提供了一个ContentControl
,它显示了子视图。这个ContentControl
通过View.Model
绑定到你的ShellViewModel的Child
属性。
在ShellView中,我使用了一个按钮来显示不同的视图,但你也可以使用菜单或类似的东西。