前言:上一节通过少量代码就可以实现一个crud的界面,但是还没有达到我们的终极目标,有没有办法,写好View和ViewModel,Wpf端就不需要更改任何代码呢?答案依旧是可以的,在数据库里配置好脚本,前台根据菜单的参数不同,从后台查回不同的脚本,然后通过一套代码,就展示了。这样是不是就把自己写淘汰了?后台添加类,添加接口,添加显示配置的脚本,添加菜单,然后就没有Wpf的事了?对呀,就是这样,让后台卷去吧。
我们先回顾一下界面设计,那么数据库配置,就要搞定这三个区域就行了。
其中: 1、查询配置有2条,对应查询条件的姓名和手机号码。 2、类别配置有13条,对应DataGrid的13个列。
可以看到三个菜单的路径都一样,参数是工程路径(区域)和实体类拼接起来的。
var result = await _dataProvider.GetData<List<Base_CommonFormConfigDTO>>(ConfigUrl, JsonConvert.SerializeObject(data)); if (!result.Success) { throw new Exception(result.Msg); } QueryConditionItems = new ObservableCollection<QueryConditionItem>(result.Data.Where(p => p.Type == 0).OrderBy(p => p.DisplayIndex).Select((p, index) => GetQueryConditionItem(p))); QueryConditionItems.Add(new QueryConditionItem() { Header = "新增", ControlType = Core.ControlType.Add, Visibility = System.Windows.Visibility.Visible }); QueryConditionItems.Add(new QueryConditionItem() { Header = "删除", ControlType = Core.ControlType.Delete, Visibility = System.Windows.Visibility.Visible }); QueryConditionItems.Add(new QueryConditionItem() { Header = "查询", ControlType = Core.ControlType.Query, Visibility = System.Windows.Visibility.Visible }); DataGridColumns = new ObservableCollection<DataGridColumnCustom>(result.Data.Where(p => p.Type == 1).OrderBy(p => p.DisplayIndex).Select((p, index) => GetDataGridColumnCustom(p))); EditFormItems = new ObservableCollection<EditFormItem>(result.Data.Where(p => p.Type == 1).OrderBy(p => p.DisplayIndex).Select((p, index) => GetEditFormItem(p))); EditFormItems.Add(new EditFormItem() { Header = "提交", ControlType = Core.ControlType.Submit, Visibility = System.Windows.Visibility.Visible });
好了,设计图中的三个区域都完成了。
注:字典添加也可以刷新,需要重新打开该界面生效。
https://gitee.com/akwkevin/aistudio.-wpf.-aclient 的AIStudio.Wpf.Agile_Development的ViewModels的Common_FormConfigQueryViewModel.cs下