【我们一起写框架】MVVM的WPF框架(五)—完结篇

这篇文章是WPF框架系列的最后一篇,在这里我想阐述一下我对框架设计的理解。

我对框架设计的理解是这样的:

框架设计不应该局限于任何一种设计模式,我们在设计框架时,应该将设计模式揉碎,再重组;这样设计出来的框架才具有一战之力。

框架设计应该根据项目团队成员水平量身定制。

我上一篇文章《我们都知道,如何不被淘汰。》中谈到,开发人员分为程序员和代码工人两种。

这两种开发人员的技术实力差距是巨大的;如果框架设计时不考虑团队成员的技术实力,那么框架很难发挥出最高战力。

比如,如果开发人员大多是代码工人,那么,在设计框架时,要尽量将分工明确考虑进来,让每个人只负责自己模块。最简单的例子就是,前后端分离。

如果开发人员大多是程序员,那么,在设计框架时,要尽量设计业务线性模块,让每个人可以掌控一条业务线,尽量不要前后端分离,尽量采取敏捷设计模式,甚至,可以开放一部分项目经理的职权给开发人员,最大化生产力。

那么,现在我们一起回头看看已经编写完的框架;我们会发现,它是一个将前后台融合,适合程序员团队的框架。

DataGrid高级应用

在高级应用中,我们对表格增加了过滤功能。界面效果如下:

 

【我们一起写框架】MVVM的WPF框架(五)—完结篇

过滤的原理是利用ICollectionView的Filter属性实现的,由于代码比较多,这里就只列出一部分关键代码,具体代码大家可以去GitHub上下载。

ItemsSourceView.Filter = new Predicate<object>((obj) => { bool isFilter = true; foreach (FilterProperty pinfo in ComparePropertyList) //循环筛选出来需要比较的属性 { string columnNameEn = pinfo.PropertyName;      var filterValue = pinfo.PropertyValue;//过滤的值      string columnType = pinfo.PropertyInfo.PropertyType.ToString().Replace("System.Nullable`1[", "").Replace("]", "").Replace("System.", "").ToLower(); if (filterValue != null) { #region 重点内容 这里开始执行真正的比较 object rowValue = ToolFunction.GetPropertyValue(obj, pinfo.PropertyInfo);//数据行的值 if (rowValue == null) { if (filterValue.ToString() == "") { return true; } else { return false; } } else { isFilter = CompareValue(columnType, rowValue, filterValue, pinfo.ConditionStr); } #endregion } if (!isFilter) { return isFilter; } } return isFilter; });

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxggd.html