【问题标题】:How to call a view from a view model using MVVM pattern?如何使用 MVVM 模式从视图模型中调用视图?
【发布时间】:2016-08-12 12:29:56
【问题描述】:

我有两个视图模型 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
        }
      
    }
}

【问题讨论】:

  • @Mat 不,我没有看到这个链接。请发布它作为答案。谢谢你:)
  • 站外链接不构成 stackoverflow 上的有效答案。答案必须是独立的。
  • 您应该将 ViewModel 视为应用程序的当前状态。它的表面特征包含来自外部世界的访问点(ICommand 属性)。 View 通过这些访问端口将用户输入输入到视图模型中。 ViewModel 的表面还包含应用程序当前状态的表达式(所有其他属性)。 View 观察 ViewModel 的状态变化并做出适当的反应。这通常采用更新 UI 的形式,但也可以采用 显示不同视图的形式。 这可以通过多种不同的方式来实现...

标签: c# wpf mvvm


【解决方案1】:

好吧,这里有一个简单的方法来做到这一点(假设你已经正确实现了 INotifyPropertyChanged):

转到您的 App.xaml 并声明一些 DataTemplates 以将 View 与 ViewModel 连接起来:

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

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

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

然后,您将设置 ViewModel,每当您希望更改视图时:

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

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

【讨论】:

    猜你喜欢
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 2015-06-14
    相关资源
    最近更新 更多