0

0

什么是MVVM架构和数据绑定?

零下一度

零下一度

发布时间:2017-06-24 09:25:16

|

3270人浏览过

|

来源于php中文网

原创

 

(申明:最近在做一个练习,写点东西,谨供参考。)

1、界面展示:其中的布局和样式就不说了,重点在MVVM架构和数据绑定(Model层使用EF(Entity Framework)实体框架,不做介绍)。

 

绑定后:

2、架构介绍:

在Views层中新建CusGroupEditWindow窗体,ViewModels中建立CusGroupEditViewModel类,在窗体的xaml或者cs中引用ViewModels对应类:

   xaml中:

       

               

      

  cs:DataContext = CusGroupEditViewModel。(添加引用路径)

/***********************************************/

*CsGroup是在ViewModel中定义的一个CusGroup对象,    *

*CusGroup对象是在SQL数据库中的表,在EF中的对象。    *

/***********************************************/

3、TextBox绑定:

  

4、Button绑定:

  

           

       

MvMmall 网店系统
MvMmall 网店系统

免费的开源程序长期以来,为中国的网上交易提供免费开源的网上商店系统一直是我们的初衷和努力奋斗的目标,希望大家一起把MvMmall网上商店系统的免费开源进行到底。2高效的执行效率由资深的开发团队设计,从系统架构,数据库优化,配以通过W3C验证的面页模板,全面提升页面显示速度和提高程序负载能力。3灵活的模板系统MvMmall网店系统程序代码与网页界面分离,灵活的模板方案,完全自定义模板,官方提供免费模

下载

5、CheckBox绑定:

  

   6、ComboBox绑定:

6、ComboBox绑定:

 

 

 

                                                 

7、DataGrid绑定:


                                
                                    
                                    
                                
                            

 

/***************************************************************/

        //DataGrid当前选择对象private CusGroup currentSelectItem;public CusGroup CurrentSelectItem
        {get { return currentSelectItem; }set{
                currentSelectItem = value;

                GetCutCmbSelect(value);
            }
        }
View Code

 

/***************************************************************/

 

ViewModel 中的代码:

   
   
using HeYin.ERP.DataModels;using HeYin.ERP.IServices;using HeYin.ERP.Models;using HeYin.ERP.Services;using Microsoft.Practices.Prism.Commands;using System;using System.Collections.Generic;using System.Collections.ObjectModel;using System.Windows;using System.Text.RegularExpressions;using System.Windows.Controls;namespace HeYin.ERP.Client.ViewModels.Customer
{class CusGroupEditViewModel : BaseViewModel
    {private bool bIsAdd = false;

        ICusGroupService CGS;  //调用IService接口#region Properties 属性private Guid gCsGroupID = Guid.Empty;//All CusGroupprivate List csGroupsAll;public List CsGroupsAll
        {get { return csGroupsAll; }set{
                csGroupsAll = value; //设定值OnPropertyChanged("CsGroupsAll"); //在属性更改后,通知            }
        }private List csGroupsMinPrestore;public List CsGroupsAllMinPrestore
        {get { return csGroupsMinPrestore; }set{
                csGroupsMinPrestore = value; //设定值OnPropertyChanged("CsGroupsAllMinPrestore"); //在属性更改后,通知            }
        }//CusGroup对象private CusGroup csGroup;public CusGroup CsGroup
        {get { return csGroup; }set{ csGroup = value;
                OnPropertyChanged("CsGroup"); }
        }/// /// /// private string strCMBselectValue;public string StrCMBselectValue
        {get { return strCMBselectValue; }set{if (value != null)
                {
                    strCMBselectValue = value;
                    OnPropertyChanged("StrCMBselectValue");
                }
            }
        }/// /// ComboBoxDataModel:作为一个ComboBox的对象,可以理解为数据源/// private ObservableCollection lstCSGDownLevelID;public ObservableCollection LstCSGDownLevelID
        {get { return lstCSGDownLevelID; }set{
                lstCSGDownLevelID = value;
                OnPropertyChanged("LstCSGDownLevelID");
            }
        }//DataGrid当前选择对象private CusGroup currentSelectItem;public CusGroup CurrentSelectItem
        {get { return currentSelectItem; }set{
                currentSelectItem = value;

                GetCutCmbSelect(value);
            }
        }private int errorCount;public int ErrorCount { get => errorCount; set => errorCount = value; }#endregion#region Commandspublic DelegateCommand BtnChangedCommand { get; set; }public DelegateCommand TxtChangedCommand { get; set; }        #endregionpublic CusGroupEditViewModel()
        {
            CGS = new CusGroupService();
            CsGroupsAll = new List();
            csGroup = new CusGroup();
            LstCSGDownLevelID = new ObservableCollection();
            BtnChangedCommand = new DelegateCommand(MenuClick);
            TxtChangedCommand = new DelegateCommand(ChangeCMBValue);

            GetAllCusGroups();
        }#region ButtonClickprivate void MenuClick(string strMessage)
        {if (string.IsNullOrEmpty(strMessage)) return;if (CsGroup == null) return;switch (strMessage)
            {case "btnCusGroupSave":
                    Save();break;case "btnCusGroupAdd":
                    Add();break;case "btnCusGroupDelete":
                    Delete();break;
            }
        }#endregion ButtonClick#region motheds/// /// 获取全部Group/// private void GetAllCusGroups()
        {//获取满足条件的客户分组信息            CsGroupsAll.Clear();
            CsGroupsAll = CGS.Get(s => s.IsDelete == 0);

            GetAllCMBItems();//给降档分组下拉框赋值if ((gCsGroupID == null || gCsGroupID == Guid.Empty) && CsGroupsAll.Count > 0)
                CsGroup = CsGroupsAll[0];    //给基础信息等赋值StrCMBselectValue = CsGroup.DownLevelID.ToString();//设置降档分组默认值        }/// /// 添加/// /// private void AddCusGroup(CusGroup cg)
        {
            cg.ID = Guid.NewGuid(); //新建分组GUIDcg.IsDelete = 0;        //默认为0:不删除cg.CreateBy = App.GetCurrentUserId();//创建人员关联员工 GUIDcg.CreateTime = DateTime.Now;  //初始化创建时间,应该使用服务器当前时间bool c = CGS.Add(cg);if (c)
            {
                MessageBox.Show(string.Format("创建新组别【{0}】成功!", CsGroup.Name), "提示", MessageBoxButton.OK, MessageBoxImage.Information);
                GetAllCusGroups();
                bIsAdd = false;
            }
        }/// /// 修改/// /// private void UpdateCusGroup(CusGroup cg)
        {
            bIsAdd = false;

            cg.UpdateTime = DateTime.Now;
            cg.UpdateBy = App.GetCurrentUserId();//更新人员关联员工 GUIDstring[] str = { "UpdateTime", "UpdateBy" };bool b = CGS.Edit(cg, str);if (b)
            {
                MessageBox.Show("更改组别【成功】!", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
                GetAllCusGroups();
            }
        }/// ///删除方法(实为更新)/// /// private void DeleteCusGroup(CusGroup cg)
        {
            cg.IsDelete = 1; //更改数据库删除标志cg.UpdateTime = DateTime.Now;  //更新删除时间cg.UpdateBy = App.GetCurrentUserId();//更新人员关联员工 GUIDstring[] str = { "UpdateTime", "IsDelete", "UpdateBy" };bool b = CGS.Edit(cg, str);if (b)
            {//MessageBox.Show(string.Format("已删除组别【{0}】!", CsGroup.Name), "提示", MessageBoxButton.OK, MessageBoxImage.Information);                GetAllCusGroups();
                CsGroup = new CusGroup(); //清空对象bIsAdd = true;
            }
        }/// /// 插入和更新方法调用/// private void Save()
        {if (ErrorCount > 0)
            {//判断必填数据是否为空:为空则提示MessageBox.Show("请核对所填数据", "提示", MessageBoxButton.YesNo, MessageBoxImage.Information);return;
            }if (bIsAdd)
                AddCusGroup(CsGroup);elseUpdateCusGroup(CsGroup);
        }/// /// 获取降档分组下拉列表的值,并指定默认值/// /// private void GetCutCmbSelect(CusGroup value)
        {
            bIsAdd = false;//点击新增后,再选择列表的逻辑if (value != null)
            {
                CsGroup = CGS.GetById(value.ID);//查找出当前选中的对象gCsGroupID = CsGroup.ID;        //保存当前选择对象的GUIDif (CsGroup != null)
                {if (CsGroup.DownLevelID.HasValue)
                    {//如果降档ID有值,则默认显示,如果没有,则显示为空GetExceptCMBSelect();//刷新下拉列表,先刷新,再赋值给默认值StrCMBselectValue = CsGroup.DownLevelID.ToString();
                    }else{
                        LstCSGDownLevelID.Clear();
                        StrCMBselectValue = string.Empty;
                    }
                }
            }
        }private void Add()
        {
            bIsAdd = true;//点击新建分组时,重新获取所有降档ID对应的中文名            GetAllCMBItems();

            CsGroup = new CusGroup();
        }private void Delete()
        {if (this.CsGroup.ID == Guid.Empty || CsGroup.ID == null)
                MessageBox.Show("请选择要删除组别", "提示", MessageBoxButton.OK, MessageBoxImage.Information);else{
                MessageBoxResult msgResult = MessageBox.Show(string.Format("确定要删除分组【{0}】吗?", CsGroup.Name), "提示", MessageBoxButton.YesNo, MessageBoxImage.Information);if (msgResult == MessageBoxResult.Yes)
                    DeleteCusGroup(CsGroup);
            }
        }/// /// 排除当前列的降档ID和对应的Name/// private void GetExceptCMBSelect()
        {
            LstCSGDownLevelID.Clear();
            CsGroupsAllMinPrestore = CGS.Get(s => s.IsDelete == 0 && s.MinPrestore <= CsGroup.MinPrestore);foreach (var iDlID in CsGroupsAllMinPrestore)
            {if (iDlID.ID != CsGroup.ID) //去除当前选择ID对应的NameLstCSGDownLevelID.Add(new ComboBoxDataModel() { Value = iDlID.ID.ToString(), Text = iDlID.Name });
            }
        }/// /// 获取列表中所有降档ID和对应的Name/// private void GetAllCMBItems()
        {
            LstCSGDownLevelID.Clear();foreach (var iDlID in CsGroupsAll)
            {
                LstCSGDownLevelID.Add(new ComboBoxDataModel() { Value = iDlID.ID.ToString(), Text = iDlID.Name });
            }
        }private void ChangeCMBValue(CusGroup cgMinPrestore)
        {
            LstCSGDownLevelID.Clear();
            List lstTextChange = new List();
            lstTextChange = CGS.Get(s => s.MinPrestore < cgMinPrestore.MinPrestore);foreach (var iDlID in lstTextChange)
            {
                LstCSGDownLevelID.Add(new ComboBoxDataModel() { Value = iDlID.ID.ToString(), Text = iDlID.Name });
            }
        }public void SizeChangedCommand(object obj, SizeChangedEventArgs e)
        {

            MessageBox.Show("日了狗");

        }#endregion}
}

 

View中代码:



    
        
            
        
    

    

        
            
            
        

        
            
                
                
            

            
            
                
                    
                        
                            
                                
                                

                                
                            
                        
                    

                    
                        
                            
                                
                                    
                                    
                                
                            
                        
                    
                
            

            
            
                
                    
                    
                    
                

                
                
                    
                        
                            
                        

                        
                            
                                
                                    
                                    
                                

                                
                                
                                    
                                    
                                        
                                            
                                                
                                                    
                                                    
                                                
                                            
                                        
                                    
                                

                                
                                    
                                    
                                        
                                            
                                                
                                                    
                                                    
                                                
                                            
                                        
                                    
                                
                            

                            
                                
                                    

                                    
                                        
                                            
                                                
                                                    
                                                    
                                                
                                            
                                        
                                    
                                
                            
                        
                    
                

                
                
                    
                        
                            
                                
                            

                            
                                
                                    
                                    
                                

                                
                                    
                                    
                                
                                
                                    
                                    
                                
                            
                        
                    
                

                
                
                    
                        
                            
                        

                        
                            
                                
                                    
                                    
                                

                                
                                    
                                    
                                
                                
                                    
                                    
                                
                            

                            
                                
                                    
                                    
                                
                            
                        
                    
                
            
        

        
        
            
                
            
        
    

 

相关专题

更多
微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

2

2026.01.18

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

74

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

133

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

54

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

39

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

19

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

106

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

44

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

11

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue.js 2.0 从入门到实战
Vue.js 2.0 从入门到实战

共192课时 | 14.9万人学习

vue 3.0全新实战课程-第一季
vue 3.0全新实战课程-第一季

共51课时 | 23万人学习

麦子学院Vue.js视频教程
麦子学院Vue.js视频教程

共30课时 | 8.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号