首页  >  文章  >  后端开发  >  MVVM C#

MVVM C#

王林
王林原创
2024-09-03 15:19:29583浏览

MVVM(模型-视图-视图模型)C# 是一种生成控制 WPF 平台核心功能的客户端应用程序的技术,可以轻松对应用程序功能进行单元测试。 MVVM(模型-视图-视图模型)是一种架构模式,表示三个不同的组件。它是软件的设计模式,用于分离用户界面控件和程序逻辑。

什么是 MVVM C#​​?

MVVM(模型-视图-视图模型)是一种软件设计模式,象征着三个独立的组件:模型、视图和视图模型。

要了解这三个组件,让我们看看它们如何协同工作,如下所示:

  • 模型:模型层是包含业务逻辑的层,它从数据源获取并保存详细信息以供 ViewModel 使用。
  • ViewModel:视图层是模型和视图之间的中间层,它不会将模型中的原始信息转换为视图适合可见的结构。让我们看一个转换示例,例如从模型到视图的 true 或 false 字符串的布尔标志。
  • 视图:它是代表软件界面的层,如图形用户界面(GUI)。它将向客户端显示来自 ViewModel 的信息,并将详细信息的更改返回给 ViewModel。

如何使用 MVVM C#​​?

模型-视图-视图模型(MVVM)的使用是一种将用户界面控件和程序逻辑分离的架构软件设计模式。它也称为 Model-View-Binder,由 Microsoft 架构师开发。

MVVM C#

这三个组件作为一个团队通过以下模式相互引用,如下所示:

  • View指出ViewModel
  • ViewModel 指出 Model

最重要的是 ViewModel 和 View 能够通过两种称为数据绑定的方法进行通信。通信的最重要组件是名为 INotifyPropertyChanged 的​​接口。

要使用此方法,View 必须通过客户端输入一直更改 ViewModel 中的信息,并且 ViewModel 必须使用通过 Model 中的过程更新的信息来更新 View,或者更新 View来自存储库的信息。 MVVM(模型视图视图模型)架构高度重视每一层的关注点分离。通过分层,还有更多好处。让我们看看以下内容。

  • 模块化:模块化支持在层内部实现期间对其进行更改或交换,而不会干扰其他人。
  • 增加可测试性:其中每个组件都必须通过错误信息的单元测试进行测试,而如果 ViewModel 程序写在 View 的 Code-Behind 中,这是不可能的。

示例中的 MVVM C#​​ ViewModel

让我们看看ViewModel的职责如下:

  • ViewModel是MVVM(Model-View-ViewModel)应用中必不可少的东西。 ViewModel最重要的任务就是将信息呈现给View,以便View将需要的数据放置在屏幕上。
  • ViewModel 使用户能够处理信息并修改数据。
  • ViewModel封装了视图的关系逻辑,但并不意味着应用程序的逻辑需要进入ViewModel。
  • ViewModel 处理适当的一系列调用,以根据客户端和视图上的任何更改来构建要发生的准确项目。
  • ViewModel 管理导航逻辑,例如选择何时导航各种视图。

创建新的 WPF 应用程序项目以更好地理解 ViewModel。

MVVM C#

接下来为 Model、View 和 ViewModel 创建三个文件夹,并删除现有的 ManiWindow.xaml,只重新开始。

MVVM C#

接下来,构建新项目以及每个对应于单独组件的项目。

  • 首先单击右侧的“模型文件夹”以包含“类”项目并将其命名为 HelloWorldModel.cs。
  • 接下来,右键单击 ViewModel 文件夹,包含 Class 项目,并将其命名为 HelloWorldViewModel.cs。
  • 接下来,右键单击“视图文件夹”,包含 WPF(窗口)项目,并将其命名为 HellowWorldView.xaml。

MVVM C#

在视图文件中,修改 App.xaml 以指向新视图,如下所示。

代码:

MVVM C#

ViewModel:

在 ViewModel 中,首先从构建 ViewModel 开始,该类应包含名为 INotifyPropertyChanged 的​​接口,以声明 PropertyChangedEventHandler 事件并构建引发该事件的方法。接下来,声明字段和相关属性并确保调用属性中的OnPropertyChanged()方法作为设置访问权限。让我们以编程方式查看示例,其中构造函数用于显示模型并向 ViewModel 提供数据。

代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using MyMVVMProject.Model;
namespace MyMVVMProject.ViewModel
 {
 // the interface INotifyPropertyChanged implements for supporting the binding purpose
 public class HelloWorldViewModel : INotifyPropertyChanged
  {
  private string _helloString;
  public event PropertyChangedEventHandler PropertyChanged;
  public string HelloString
  {
   get
   {
    return _helloString;
   }
  set
  {
   helloString = value;
   OnPropertyChanged();
 }
}
/// <summary>
/// when the Property modifies it Raises OnPropertychangedEvent
/// </summary>
/// <param name="name">Property name represented by String</param>
protected void OnPropertyChanged([CallerMemberName] string name = null)
{
 PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
public HelloWorldViewModel()
  {
   HelloWorldModel hwModel1 = new HelloWorldModel();
   _helloString = hwModel1.ImportantInfo;
  }
 }
}

型号:

然后是Model的创建,它通过从存储库中拖拽数据来为ViewModel提供数据,并且会返回到存储库中进行存储。这里用 GetInfo () 方法解释该程序,该方法返回简单列表 。而业务逻辑也应用在这里,就会有 ConcatenateData() 方法。这用于从列表 创建消息“Hello World”。从存储库返回。

代码:

private List<string> GetInfo ()
 {
  repositoryData = new List<string>()
  {
   "Hello",
   "world"
 };
 return repositoryData;
}

让我们看看下面的代码:

代码:

MVVM C#

查看:

最后,我们需要创建一个View;它没什么,但必须在 XAML 中包含一些代码;该窗口需要对 ViewModel 命名空间的引用。然后将其映射到 XAML。最主要的是要确保绑定ViewModel的属性,它显示标签内容。

代码:

MVVM C#

结论

在本文中,我们看到 MVVM C#​​ 有助于设计人员和开发人员以最少的技术复杂性进行协作。

以上是MVVM C#的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
上一篇:C# Career下一篇:Abstraction in C#