这篇文章是WPF框架系列的最后一篇,在这里我想阐述一下我对框架设计的理解。
我对框架设计的理解是这样的:
框架设计不应该局限于任何一种设计模式,我们在设计框架时,应该将设计模式揉碎,再重组;这样设计出来的框架才具有一战之力。
框架设计应该根据项目团队成员水平量身定制。
我上一篇文章《我们都知道,如何不被淘汰。》中谈到,开发人员分为程序员和代码工人两种。
这两种开发人员的技术实力差距是巨大的;如果框架设计时不考虑团队成员的技术实力,那么框架很难发挥出最高战力。
比如,如果开发人员大多是代码工人,那么,在设计框架时,要尽量将分工明确考虑进来,让每个人只负责自己模块。最简单的例子就是,前后端分离。
如果开发人员大多是程序员,那么,在设计框架时,要尽量设计业务线性模块,让每个人可以掌控一条业务线,尽量不要前后端分离,尽量采取敏捷设计模式,甚至,可以开放一部分项目经理的职权给开发人员,最大化生产力。
那么,现在我们一起回头看看已经编写完的框架;我们会发现,它是一个将前后台融合,适合程序员团队的框架。
DataGrid高级应用
在高级应用中,我们对表格增加了过滤功能。界面效果如下:
过滤的原理是利用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; });