设为首页 加入收藏

TOP

“老坛泡新菜”:SOD MVVM框架,让WinForms焕发新春(四)
2017-10-13 10:41:53 】 浏览:8768
Tags::SOD MVVM 框架 WinForms 焕发 新春
用户列表和响应视图的增加,修改,删除用户的命令,详细代码如下

public class SubmitedUsersViewModel
    {

        private UserModel model = new UserModel();
        public BindingList<UserEntity> Users { get; private set; }
        public UserEntity CurrentUser { get; private set; }

        
        UserEntity _selectUser;
        /// <summary>
        /// 当前选择的用户,如果设置,则会设置当前用户
        /// </summary>
        public UserEntity SelectedUser {
            get { return _selectUser; }
            set {
                _selectUser = value;
                this.CurrentUser.ID = value.ID;
                this.CurrentUser.Name = value.Name;
            }
        
        }

        int _selectedUserID;
        public int SelectedUserID
        {
            get { return _selectedUserID; }
            set {
                _selectedUserID = value;
                var obj = this.Users.FirstOrDefault(p=>p.ID==value);
                if (obj != null)
                {
                    this.CurrentUser.ID = obj.ID;
                    this.CurrentUser.Name = obj.Name;
                    _selectUser = this.CurrentUser;
                }
                
            }
        }

        public SubmitedUsersViewModel()
        {
            var data = model.GetAllUsers();
            Users = new BindingList<UserEntity>(data);
            CurrentUser = new UserEntity();

        }

        public void UpdateUser()
        {
            var obj = this.Users.FirstOrDefault(p => p.ID == this.CurrentUser.ID);
            if (obj != null)
            {
                obj.Name = this.CurrentUser.Name;
                //更新后必须调用 ResetBindings 方法,否则控件上的数据会丢失一行
                this.Users.ResetBindings();

                model.UpdateUser(obj);
            }
            
        }
        public void UpdateUser(int id,string name)
        {
            var obj = this.Users.FirstOrDefault(p => p.ID == id);
            if (obj != null)
            {
                obj.Name = name;
                //更新后必须调用 ResetBindings 方法,否则控件上的数据会丢失一行
                this.Users.ResetBindings();

                model.UpdateUser(obj);
            }
        }

        public void SubmitUsers(UserEntity user)
        {
            //UserEntity newUser = new UserEntity();
            //newUser.ID = user.ID;
            //newUser.Name = user.Name;
            //Users.Add(newUser);
            if (!Users.Contains(user))
            {
                Users.Add(user);
                model.SubmitUser(user);            
            }
        }
        public void SubmitCurrentUsers()
        {
            UserEntity newUser = model.CreateNewUser(CurrentUser.Name);
            SubmitUsers(newUser);
            CurrentUser.ID = newUser.ID;
        }

        public void RemoveUser()
        {
            if (SelectedUser == null)
            {

                return;
            }
            var obj = this.Users.FirstOrDefault(p => p.ID == SelectedUser.ID);
            if (obj != null)
            {
                this.Users.Remove(obj);
                //更新后必须调用 ResetBindings 方法,否则控件上的数据会丢失一行
                this.Users.ResetBindings();

                model.RemoveUser(obj);
            }
        }
    }
View Code

 

添加Nuget包引用

对于整个解决方案,我们都需要添加 PDF.NET Core 包,但是对于我们的WinForms 主程序,需要额外添加2个相关的包,一个SOD WinForm扩展和一个SOD Access 扩展,下面是解决方案安装的全部包示意图:

 

运行解决方案

经过上面的过程,我们添加了视图元素,设置好了视图元素的数据绑定,创建了模型和视图模型对象,一个简单的MVVM示例程序就好了,下面是运行效果图:

 

MVVM模式总结

通过运行此示例,相信你已经体验了MVVM的一些特点,但可能难以表述贴切,正好我跟几个WPF资深专家交流后,他们总结出了MVVM的几个核心特点(卖点):

1,视图逻辑(视图模型)和视图(视图元素,样式)的解除耦合;
2,视图和视图模型或者模型的双向数据绑定,面向数据驱动视图而不是视图驱动数据;

3,视图和视图模型的分离将界面功能全部代码化,并提供TDD可能性。

 

SOD WinForms MVVM支持

自SOD框架版本 5.6.0.1111 发布的这个“光棍节“版本中,您已经可以在此以后的版本中获得直接的WinForms MVVM支持,如果是之前的版本,那么需要本示例程序一样稍微多做一点工作,但这对于你现有的SOD支持的解决方案来说不会造成任何影响。

 

本示例方案将会放到框架的开源网站 http://pwmis.codeplex.com 上提供直接的下载,并且源码已经全部提交,可以通过下面地址查看详细的代码说明:

http://pwmis.codeplex.com/SourceControl/latest#SOD/Example/WinFormMvvm/WinFormMvvm/Readme.txt

 

了解更多信息或者加入社区QQ群讨论,或者捐助本框架,请移步框架官网:

http://www.pwmis.com/sqlmap

 

感谢你选择SOD框架,相信它能够为你的开发带来很大的便利!

 

 

 

SOD开发团队

深蓝医生

2016.11.13

------------PS---------------

感谢SOD开发团队的 @广州-银古 同学,他已

首页 上一页 1 2 3 4 5 下一页 尾页 4/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java列表 下一篇后台架构设计—数据存储层

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目