博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
wpf企业应用之主从结构列表
阅读量:4688 次
发布时间:2019-06-09

本文共 4989 字,大约阅读时间需要 16 分钟。

  主从结构在企业级应用中相当常见,这里结合我的例子谈一下wpf中主从结构列表展示的常用做法,具体效果见 。

  首先,Model有两种,主表对应model(假设为modelA),从表对应的model(假设为modelB),两种model分别用于绑定列表,就是普通列表的绑定。

  其次,由于要实现联动效果(即选择主表中的一条记录显示从表的记录),故而我们的ViewModel里面必须设计一个SelectedModelA用来绑定选中项,SelectedModelA变化时去更新modelB列表的数据源(通常SelectedModelA中会包含一个集合,不过我这里由于其他原因单独弄了个集合,逻辑其实大同小异)。

  下面是我的代码,由于夹杂着一些业务,仅供参考,其实读者只需明白主表的选中项作为从表UI的数据源即可。

  UI部分,可先直接看下具体效果 ,绑定部分主要看两个DataGrid即可。

  ViewModel中相关代码

public class ProductListVM : ViewModelBase    {        public ProductListVM()        {            LoadData();            TreeVM.SelectedChanged += (s, e) =>            {                LoadData();                if (TreeVM.SelectedModel != null && !string.IsNullOrEmpty(TreeVM.SelectedModel.ID))                    CanAdd = true;                else                    CanAdd = false;            };        }        private ClassifyTreeVM _treeVM;        public ClassifyTreeVM TreeVM        {            get            {                return _treeVM ?? (_treeVM = new ClassifyTreeVM());            }        }        private tb_product _selectedProduct;        public tb_product SelectedProduct        {            get            {                return _selectedProduct;            }            set            {                _selectedProduct = value;                OnPropertyChanged("SelectedProduct");                if (value != null)                    CanModify = true;                else                    CanModify = false;                RaiseCanExecute();            }        }        private List
_products; public List
Products { get { return _products; } set { _products = value; OnPropertyChanged("Products"); } } protected override void LoadData() { if (TreeVM.SelectedModel != null && !string.IsNullOrEmpty(TreeVM.SelectedModel.ID)) Products = XDBContext.tb_product.Where(p => p.ClassifyID == TreeVM.SelectedModel.ID).AsNoTracking().ToList(); else Products = XDBContext.tb_product.AsNoTracking().ToList(); } }
  public class ClassifyTreeVM : ViewModelBase    {        public ClassifyTreeVM()        {            LoadData();        }        private BindingList
_classifyModels; public BindingList
ClassifyModels { get { return _classifyModels; } set { _classifyModels = value; OnPropertyChanged("ClassifyModels"); } } public event EventHandler SelectedChanged; private TB_ClassifyTreeModel _selectedModel; public TB_ClassifyTreeModel SelectedModel { get { return _selectedModel; } set { _selectedModel = value; OnPropertyChanged("SelectedModeld"); if (SelectedChanged != null) SelectedChanged(SelectedModel, null); } } protected override void LoadData() { ClassifyModels = new BindingList
(); ClassifyModels.Add(new TB_ClassifyTreeModel(XDBContext) { ClassifyName = "All", ID = string.Empty }); } }

   关于主从结构编辑的保存,UI绑定就是一个主表model(包含从表集合),没什么特别的。只是在保存的时候一起保存从表信息即可(从表中可能有增删改,具体如何操作取决于数据操作层,数据少懒惰点的做法可以一股脑先将相关从表记录全删掉然后添加,这样就不用区分哪些记录是删除的、哪些是修改的及哪些是新添加的;通常有时候会在model中设计一个状态属性,以方便区分model的状态)

转载于:https://www.cnblogs.com/Fuss/p/4093743.html

你可能感兴趣的文章
端口扫描base
查看>>
iOS IM开发的一些开源、框架和教程等资料
查看>>
FansUnion:共同写博客计划终究还是“流产”了
查看>>
python 二维字典
查看>>
编译原理实验一
查看>>
Git for Android Studio 学习笔记
查看>>
pip 警告!The default format will switch to columns in the future
查看>>
Arrays类学习笔记
查看>>
实验吧之【天下武功唯快不破】
查看>>
2019-3-25多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量)...
查看>>
win7-64 mysql的安装
查看>>
dcm4chee 修改默认(0002,0013) ImplementationVersionName
查看>>
maven3在eclipse3.4.2中创建java web项目
查看>>
发布时间 sql语句
查看>>
黑马程序员 ExecuteReader执行查询
查看>>
记一些从数学和程序设计中体会到的思想
查看>>
题目1462:两船载物问题
查看>>
POJ 2378 Tree Cutting(树形DP,水)
查看>>
第二冲刺阶段个人博客5
查看>>
UVA 116 Unidirectional TSP (白书dp)
查看>>