MVVM框架在WPF应用中的实现

MVVM(Model-View-ViewModel)是一种设计模式,用于简化用户界面的实现。它将应用程序分为三个主要部分:模型(Model),视图(View)和视图模型(ViewModel)。本文将引导通过C#代码实现一个不依赖任何框架的MVVM应用。

创建项目

首先,打开Visual Studio 2011,创建一个新的Metro风格空白应用程序项目。将看到一个默认的Metro UI界面,它通常是一个空白的黑色背景,没有按钮或其他元素。在代码后台,会有一些默认的代码行和大量的注释。将仅在构造函数中使用一次代码后台,写入一行代码。

创建模型和视图模型

接下来,在解决方案中创建两个文件夹:Model和ViewModel。Model文件夹将包含“类”,而ViewModel文件夹将包含类,但这些类将代表Model类的一个集合,并且将包含代码以将视图与ViewModel连接起来。

对于这个应用程序,将选择一个简单的Contact类,它包含一个名称、电子邮件和一个GUID来唯一标识它。右键单击Model文件夹,选择“添加”->“类”,将类命名为Contact.cs。导入命名空间System.ComponentModel,因为将使用INotifyPropertyChanged接口。这将允许ViewModel在模型发生变化时与之通信。

定义完模型后,让现在关注ViewModel。右键单击ViewModel文件夹,选择“添加”->“类”。由于这个ViewModel将与Contact.cs模型一起工作,将把它命名为“ContactViewModel.cs”。点击确定。

注意,这里是MVVM魔法发生的地方。ContactViewModel实现了INotifyPropertyChanged接口,这次是为了通知视图属性的变化,反之亦然。导入System.ComponentModel并隐式实现INotifyPropertyChanged。

接下来,需要创建一个类,当视图上发生任何事件(比如按钮点击)时,它将调用适当的方法。这个类将是一个泛型类,并将用于所有的按钮点击事件。

右键单击ViewModel文件夹,选择“添加”->“类”。将类命名为MyCommand,或者可以在现有文件中创建一个新类。

这个类实现了一个称为“回调”的机制,其中“将一个方法的*名称*传递给另一个方法,并告诉另一个方法在完成其工作时调用命名的方法”。这听起来很疯狂和令人困惑,但实际上很容易理解。研究一些回调的例子,会发现它相当容易理解。

创建视图

视图是一个非常简单的用户界面。如前所述,视图上只有5个按钮。让继续创建视图。对于视图,将使用BlankPage.xaml。打开BlankPage.xaml.cs(代码后台)。需要告诉视图,视图上发生的任何事件都将由ViewModel处理。

DataContext将当前UI与ContactViewModel链接起来。

现在让创建5个按钮。它们将是“刷新”、“添加新”、“保存”、“更新”、“删除”。注意每个按钮上的Command属性。命令属性告诉视图在按钮被点击时要查找的位置。在Command属性中,指定想要调用的ViewModel属性。然后ViewModel属性将调用相应的方法。

现在应该已经理解了,ViewModel属性调用适当方法的头痛问题。这将UI关于响应事件的关注点分开。这种设置允许分别测试每个“部分”。

当“保存”按钮被点击时,SaveCommand属性被调用。ViewModel的SaveCommand属性具有OnSave()方法的签名。因此ViewModel的SaveCommand最终将调用OnSave()方法。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485