为了账号安全,请及时绑定邮箱和手机立即绑定

WPF MVVM导航视图

WPF MVVM导航视图

C#
慕斯709654 2019-07-02 17:03:29
WPF MVVM导航视图我有一个具有多个视图的WPF应用程序。我希望从视图1切换到视图2,从那里我可以切换到多个视图。因此,我希望在视图1上有一个按钮,在同一个窗口中加载view2。我试过那些东西,但不能让它起作用。如何使用MVVM LightforWPF在窗口中导航?http:/blog.galasoft.ch/存档/2011/01/06/导航-a-WP7-application-withMVVM-light.aspx从第一个链接来看,问题在于我不理解viewModellocator代码。他们调用CreateMain();函数,但是这个函数是在哪里定义的,以及如何从视图内部切换到另一个视图。
查看完整描述

3 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

首先,您不需要任何这些工具箱/框架来实现MVVM。可以这么简单.。假设我们有一个MainViewModel,和PersonViewModel和一个CompanyViewModel,每个视图都有各自的相关视图,并且每个视图都扩展为abstract基类BaseViewModel.

在……里面BaseViewModel,我们可以添加公共属性和/或ICommand实例并实现INotifyPropertyChanged接口。因为它们都扩展了BaseViewModel类中,我们可以在MainViewModel类,该类可以设置为我们的任何视图模型:

public BaseViewModel ViewModel { get; set; }

当然,您将实现INotifyPropertyChanged接口正确你的属性与此快速示例不同。现在进去App.xaml,我们声明一些简单的DataTemplates将视图连接到视图模型:

<DataTemplate DataType="{x:Type ViewModels:MainViewModel}">
    <Views:MainView /></DataTemplate><DataTemplate DataType="{x:Type ViewModels:PersonViewModel}">
    <Views:PersonView /></DataTemplate><DataTemplate DataType="{x:Type ViewModels:CompanyViewModel}">
    <Views:CompanyView /></DataTemplate>

现在,无论我们用哪一种BaseViewModel在我们的应用程序中,这些实例DataTemplateS将告诉框架显示相关视图。我们可以这样展示:

<ContentControl Content="{Binding ViewModel}" />

因此,我们现在要切换到新视图所需要做的就是设置ViewModel属性的MainViewModel班级:

ViewModel = new PersonViewModel();

最后,我们如何改变其他观点的观点?有几种可能的方法可以做到这一点,但最简单的方法是添加一个Binding直接从子视图到ICommandMainViewModel..我使用自定义版本的RelayComand,但你可以使用你喜欢的任何类型,我猜你会得到图片:

public ICommand DisplayPersonView{
    get { return new ActionCommand(action => ViewModel = new PersonViewModel(), 
        canExecute => !IsViewModelOfType<Person>()); }}

在子视图中,XAML:

<Button Command="{Binding DataContext.DisplayPersonView, RelativeSource=
    {RelativeSource AncestorType={x:Type MainView}}, Mode=OneWay}" />

就这样!好好享受吧。


查看完整回答
反对 回复 2019-07-02
  • 3 回答
  • 0 关注
  • 856 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信