当前位置:首页 期刊杂志

MVVM在过程质量监控系统中的应用

时间:2024-06-19

郭树岩

( 辽宁科技学院 应用技术学院,辽宁 本溪 117004 )

MVVM在过程质量监控系统中的应用

郭树岩

( 辽宁科技学院 应用技术学院,辽宁 本溪 117004 )

研究了微软的MVVM(Model-View-ViewModel)特点和优势,并结合本钢过程质量监控系统,通过WPF+WCF开发的客户端和服务器端的应用程序,以及MVVM的内部结构的模块设计,将其拓展为具有通用功能的自主模块,使每个WPF UI(开发界面)都具有相同的功能,更便于使用中进行取舍。

WPF;UI;MVVM;监控系统

Model-View-ViewModel是一种类似于MVC架构模式,主要在WPF、Silverlight和WP7开发里使用,它的目标是从视图层移除几乎所有代码隐藏(code-behind)。交互界面的设计师可以专注于使用XAML表达用户对操作界面的需求,然后创建和视图模型的绑定,而视图模型则是由具有编写高级语言的应用程序开发者进行开发和维护的〔2〕。如图1所示

图 1 标准MVVM架构

1 MVVM结构

MVVM模式广泛应用在WPF项目开发中,使用此模式可以把UI和业务逻辑分离开,使UI设计人员和业务逻辑人员能够分工明确。

MVVM模式是根据MVP模式来的,可以简单的说,MVVM模式就是WPF版的MVP模式。MVP模式,MVC模式,这几个模式都是为了抽离出UI逻辑和业务逻辑〔2〕,如图2所示。

图 2 MVVM模式演变

2 本钢过程质量监控系统中MVVM的特点

MVVM是WPF(Windows Presentation Foundation)开发人员的专用语言,因为它很适合WPF平台,WPF被设计使它很容易使用MVVM模式去构建应用程序。实际上,微软内部也用MVVM去开发WPF应用程序,如Microsoft Expression Blend,而核心WPF平台正在建设中。WPF的很多方面,例如Telerik中的各种控件,利用强壮的从状态和行为中分离显示,我们设计的MVVM的主要特点如下:

2.1 WPF使得MVVM成为一个强大的模式的一个最重要的方面是数据绑定

通过一个View到Viewmodel的绑定属性,使两者之间得到松耦合,完整地移除了在ViewModel里直接写代码更新一个view的需要。数据绑定系统也支持输入验证,提供了传递验证错误到view的标准方式。WPF使得这个模式如此有用的其他两个特征是数据模板和资源系统。数据模板应用View到ViewModel对象显示在用户界面。你能在XAML里声明模板,让资源系统为你在运行时自动地加载和应用这些模板。

2.2 存储数据的集合是ObservableCollection

ObservableCollection做为viewModel的依赖而不是list,也不是dictionary,而是ObservableCollection。ObservableCollection 为WPF窗口提供你的数据集合,class T 为Entity Framework生成的数据库中表的实体和手动创建的某一个类。因每一个WPF控件(包括“窗口”)都有一个 DataContext 属性,集合控件都有一个“ItemsSource”属性用于绑定。

2.3 命令绑定依赖属性,异步执行数据的存取和更改操作

“INotifyPropertyChanged”接口将被广泛的的用于GUI和你的代码之间的通信,当数据有任何改变的时候,通过ICommand接口调用async void OnCommand() 执行WCF实现的异步操作。

2.4 使用计时器与进度条的步进值进行捆绑,动态地显示数据存取进度

3 MVVM的代码实现步骤

按如下次序创建适用于本钢过程质量监控系统中MVVM,其中包括计时器、表名、数值型字段、钢种、查询的起止日期、用于各类图表输出的X轴和Y轴、进度条值、数据集等。

3.1 数据源的创建

使用SqlServer 2012数据库,使用Entity FrameWork 的Reverser Engineer First Code 创建STL_10_SQLContext和表的实体,如表名即为实体名。

3.2 使用Telerik控件的radgridview进行数据显示,其关键代码如下〔1〕:

ItemsSource="{Binding myQueryResult, Source={StaticResource commonData }}" />

3.3 其ViewModel大致的创建过程如下:

以NotificationObject为基类派生一个BPQM_COMM_ViewModel类。

public class : NotificationObject

初始化时,生成计时器:

this.timer = new DispatcherTimer();

this.timer.Interval = TimeSpan.FromMilliseconds(100.0);

this.timer.Tick += new EventHandler(this.Timer_Tick);

创建依赖属性如表名:

private string _TableName;

radGridView 的数据源是ObservableCollection〈〉

private ObservableCollection _myQueryResult;

执行查询填充网格数据代码〔1〕:

private async void OnDateQuery()

{

try

{

using (Service1Client client = new Service1Client()) //WCF

{

DateTime tmS = new DateTime();

timer.Start();

tmS = DateTime.Now;

string sDate = string.Format("{0:yyyyMMdd}", StartDate);

string str = string.Format("{0},{1},{2},{3},{4}", sDate, eDate, sWorkshop, sGrade, sNumberField);

var aa = await client.getAnyChartDataRangeAsync(sWorkshop, "PONO", sNumberField, sDate, eDate, sGrade, "1");

myQueryResult = new ObservableCollection(aa);

tmE = DateTime.Now;

TimeSpan tm = tmE - tmS;

MyDuration = tm.Seconds;

ResultMsg = "炼钢转炉数据查询成功";

}

}

catch (Exception ex)

{

Console.WriteLine(ex);

_ResultMsg = "程序出现异常";

}

}

4 结语

随着系统的规模不断发展 ,对系统进行有效分布式处理使用了WCF技术,提高资源利用率的要求越来越高,因此从客户/数据库方案转变到三层客户/应用系统/数据服务器结构是业界发展的趋势。本文讨论了MVVM技术,并分析了MVVM的开发模式和特点,包括异步请求、WPF、WCF和实体框架的生成技术使得代码简单化,图形界面更加美观。

〔1〕(美)麦克唐纳. WPF编程宝典〔M〕 . 北京:清华大学出版社,2010.

〔2〕刘立.MVVM 模式分析与应用〔J〕. 微型电脑应用, 2012,28( 12) : 57-60.

ApplicationofMVVMtotheMonitoringSystemofProcessQuality

GUO Shu-yan

(SchoolofAppliedTechnology,LiaoningaianstituteofScienceandTechnology,Benxi,Liaoning, 117004,China)

The paper studies the performance and Superiority of MVVM developed by Microsoft, and expands it to the module with general function on its own initiative, by using the applied program for customer and servicer. So as every WPF UI have the same function, as to conveniently use.

WPF; UI; MVVM; Monitoring system.

1008-3723(2017)04-001-02

10.3969/j.issn.1008-3723.2017.04.001

2017-06-20

郭树岩(1963-),男,辽宁本溪人,辽宁科技学院应用技术学院副教授,研究方向:自动化技术。

TB497

:A

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!