如何使用MVVM模式从视图模型中调用视图?

时间:2016-08-12 12:29:57

标签: c# wpf mvvm

我有两个视图模型A和B.双击视图A我需要显示视图B. 如何使用MVVM模式从模型A中调用视图B?

我环顾四周,找不到一个明确的例子来证明MVVM模式的这个基本概念。

C#

using Microsoft.Practices.Prism.Commands;
using Microsoft.Practices.Prism.Mvvm;
using System.Windows.Input;


namespace Example.ViewModels
{
    public class ViewModelA : BindableBase
    {

      public ICommand ShowInfoCommand { get; private set; }

      //Need to call view B  
      private void OnShowInfo(object obj)
        {
             //To Be Implemented
        }

    }
}

1 个答案:

答案 0 :(得分:1)

嗯,这是一个简单的方法(假设您已正确实现了INotifyPropertyChanged):

转到App.xaml并声明一些DataTemplates以将Views与ViewModels连接:

<DataTemplate DataType="{x:Type ViewModels:ViewModelA}">
    <Views:ViewA />
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModels:ViewModelB}">
    <Views:ViewB />
</DataTemplate>

现在,只要您的应用程序使用ViewModelA或ViewModelB,这些DataTemplates就会设置正确的视图。 您可以使用内容演示者或内容控件来控制要显示的视图模型:

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

然后,只要您想更改视图,就会设置ViewModel:

//Need to call view B  
private void OnShowInfo(object obj)
{
    ViewModel = new ViewModelB();
}

嗯,就是这样。 ContentControl与DataTemplates的ViewModel绑定将完成工作! 当然,有很多不同的方法可以做到这一点。这取决于您的要求。我目前正在使用NavigationService在我的一个项目中处理这个问题。