mvvm+DataSet使编程变得简单

<pre name="code" class="csharp">public class Student : RaiseBase
    {
        private StDataSet.studentRow studentrow;
        public StDataSet.studentRow Studentrow
        {
            get { return studentrow; }
        }
        public int StuID
        {
            get
            {
                return xkzdatarow.stuID;
            }
        }
        public string Sname
        {
            get
            {
                return studentrow.sname;
            }
            set
            {
                if (studentrow.sname != value)
                {
                    studentrow.sname = value;
                    RaisePropertyChanged("Sname");
                }
            }
        }
        public int Age
        {
            get
            {
                return studentrow.age;
            }
            set
            {
                if (studentrow.age != value)
                {
                    studentrow.age = value;
                    RaisePropertyChanged("Age");
                }
            }
        }
        public bool IsNew { get; set; }
        public int GetMaxStuID()
        {
            object obj = DataRepository.GetInstance().sda.GetMaxStuID();
            if (obj == null)
            {
                return 1;
            }
            else
            {
                return int.Parse(obj.ToString());
            }
        }
        public void SetNewStuID()
        {
            studentrow.stuID = GetMaxStuID();
        }
        public static Student GetFromDataRow(StDataSet.studentRow _studentrow)
        {
            return new Student()
            {
                studentrow = _studentrow,
                IsNew = false,
            };
        }
        public Student(bool isNew)
        {
		studentrow = DataRepository.GetInstance().tbSudents.NewstudentRow();
                IsNew = isNew;
<span style="white-space:pre">		</span>studentrow.sname = "";
<span style="white-space:pre">		</span>studentrow.age = 0;
         }
        public Student()
        {
        }
    }

public class DataRepository
    {
        private static DataRepository _instance;
        public StDataSet stDataSet;
        public StDataSetTableAdapters.studentTableAdapter sda;

        public static DataRepository GetInstance()
        {
            if (_instance == null)
            {
                _instance = new DataRepository();
            }
            return _instance;
        }

        private DataRepository()
        {
            this.LoadData();
        }
        public StDataSet.studentDataTable tbStudents
        {
            get { return stDataSet.student; }
        }

        public IEnumerable<Student> GetStudents()
        {
            foreach (StDataSet.studentRow dataRow in tbStudents.Rows)
            {
                yield return Student.GetFromDataRow(dataRow);
            }
        }

        public void SaveStudent(Student student)
        {
            if (student.IsNew)
            {
                AddStudent(student);
            }
            else
            {
                sda.Update(student.Studentrow);
            }
        }
        private void AddStudent(Student student)
        {
            tbStudents.Rows.Add(student.Studentrow);
            sda.Update(student.Studentrow);
        }
        public void DeleteStudent(Student student)
        {
            sda.Delete(student.Studentrow);
        }

        private void LoadData()
        {
            stDataSet = new StDataSet();
            sda = new StDataSetTableAdapters.studentTableAdapter();
            sda.Fill(stDataSet.student);
        }
        private void DisposeData()
        {
            stDataSet.student.Dispose();
            stDataSet.Dispose();
        }
        public void Exit()
        {
            DisposeData();
            _instance = null;
        }
    }
}
public class DisplayStudentViewModel : ViewModelBase
    {
        private Student _displayedStudent;
        public Student DisplayedStudent
        {
            get { return _displayedStudent; }
            set
            {
                if (_displayedStudent != value)
                {
                    _displayedStudent = value;
                    RaisePropertyChanged("DisplayedStudent");
                    RaisePropertyChanged("IsSelected");
                }
            }
        }
        public bool IsSelected
        {
            get { return (DisplayedStudent != null); }
        }

        private ObservableCollection<Student> students;
        public ObservableCollection<Student> Students
        {
            get
            {
                if (students == null)
                {
                    students = new ObservableCollection<Student>();
                    foreach (var student in DataRepository.GetInstance().GetStudents())
                    {
                        students.Add(student);
                    }
                }
                return students;
            }
        }

        enum EditModeType
        {
            DefaultMode, //非编辑模式
            AddNewMode,  //添加
            EditMode,    //修改
            BgMode,      //变更
            ZxMode       //注销
        }
        EditModeType _editModeType;

        private EditModeType editModeType
        {
            get { return _editModeType; }
            set { _editModeType = value; }
        }
        private RelayCommand _addNewCommand;
        private RelayCommand _editCommand;
        private RelayCommand _updateCommand;
        private RelayCommand _deleteCommand;
        private RelayCommand _saveCommand;
        private RelayCommand _cancelCommand;
        private RelayCommand _exitCommand;

        public DisplayStudentViewModel()
        {
            editModeType = EditModeType.DefaultMode;
        }

        public ICommand AddCommand
        {
            get
            {
                if (this._addNewCommand == null)
                {
                    this._addNewCommand = new RelayCommand(AddNew,CanAddNew);
                }

                return this._addNewCommand;
            }
        }
        public ICommand EditCommand
        {
            get
            {
                if (this._editCommand == null)
                {
                    this._editCommand = new RelayCommand(Edit,CanEdit);
                }

                return this._editCommand;
            }
        }
        public ICommand UpdateCommand
        {
            get
            {
                if (this._updateCommand == null)
                {
                    this._updateCommand = new RelayCommand(Update,CanUpdate);
                }

                return this._updateCommand;
            }
        }
        public ICommand DeleteCommand
        {
            get
            {
                if (this._deleteCommand == null)
                {
                    this._deleteCommand = new RelayCommand(Delete,CanDelete);
                }

                return this._deleteCommand;
            }
        }
        public ICommand SaveCommand
        {
            get
            {
                if (this._saveCommand == null)
                {
                    this._saveCommand = new RelayCommand(Save,CanSave);
                }

                return this._saveCommand;
            }
        }

        public ICommand CancelCommand
        {
            get
            {
                if (this._cancelCommand == null)
                {
                    this._cancelCommand = new RelayCommand(Cancel,CanCancel);
                }

                return this._cancelCommand;
            }
        }

        public ICommand ExitCommand
        {
            get
            {
                if (this._exitCommand == null)
                {
                    this._exitCommand = new RelayCommand(Exit, CanExit);
                }

                return this._exitCommand;
            }
        }

        void AddNew(object obj)
        {
            DisplayedStudent = new Student(true);
            editModeType = EditModeType.AddNewMode;
        }
        bool CanAddNew(object obj)
        {
            return (IsDefaultMode());
        }
        void Edit(object obj)
        {
            editModeType = EditModeType.EditMode;
        }
        bool CanEdit(object obj)
        {
            return (IsDefaultMode()) && IsSelected;
        }
        void Update(object obj)
        {
            editModeType = EditModeType.BgMode;
        }
        bool CanUpdate(object obj)
        {
            return (IsDefaultMode()) && IsSelected;
        }
        void Cancel(object obj)
        {
            CancelEdit();//略
	    editModeType = EditModeType.DefaultMode;
        }
        bool CanCancel(object obj)
        {
            return !IsDefaultMode();
        }
        void Save(object obj)
        {
            if (!SaveStudent())
            {
                 return;
            }
            editModeType = EditModeType.DefaultMode;
        }
        bool SaveStudent()
        {
            if (editModeType == EditModeType.AddNewMode)
            {
                try
                {
                    DataRepository.GetInstance().SaveStudent(DisplayedStudent);
                    DisplayedStudent.IsNew = false;
                    DisplayedStudent.SetNewStuID();
                    Students.Add(DisplayedStudent);
                    return true;
                }
                catch { return false; }
            }
            else if (editModeType == EditModeType.EditMode)
            {
                try
                {
                    DataRepository.GetInstance().SaveStudent(DisplayedStudent);
                    return true;
                }
                catch { return false; }
            }
            else if (editModeType == EditModeType.BgMode)
            {
                try
                {
                    DataRepository.GetInstance().SaveStudent(DisplayedStudent);//变更数据保存程序略
                    return true;
                }
                catch { return false; }
            }
            else
                try
                {
                    DataRepository.GetInstance().DeleteStudent(DisplayedStudent);
                    Students.Remove(DisplayedStudent);
                    return true;
                }
                catch { return false; }
        }
        bool CanSave(object obj)
        {
            return !IsDefaultMode();
        }

        void Delete(object obj)
        {
            editModeType = EditModeType.ZxMode;
        }
        bool CanDelete(object obj) { return (IsDefaultMode()) && IsSelected;  }

        void Exit(object obj)
        {
            DataRepository.GetInstance().Exit();
            App.Current.Shutdown();
        }
        bool CanExit(object obj) { return (IsDefaultMode()); } 

        private bool IsDefaultMode()
        {
            return editModeType == EditModeType.DefaultMode;
        }
    }
时间: 2024-08-30 11:00:59

mvvm+DataSet使编程变得简单的相关文章

gedit变身为编程利器的简单配置

本文由fcbruce个人原创整理,转载请注明出处:http://blog.csdn.net/u012965890/article/details/38472149.>_< 用了linux有半年多了(ubuntu->debian),之前敲代码都是通过IDE来编译运行,一直有转Vim的想法,可是那玩意太高端,暂时玩不过来.前两天发现gedit加上各种插件简直就是神器,这两天一直在抽空配置,试用了下,感觉很爽,哈哈哈哈哈哈哈,下面来分享下我的心得.>_< 操作系统:Debian 7

Java 多线程编程两个简单的例子

/** * @author gao */ package gao.org; public class RunnableDemo implements Runnable{ @Override public void run() { // TODO Auto-generated method stub for(int i=0;i<10;i++){ System.out.println("新线程输出:"+i); } } public static void main(String []

[转载]通达信插件选股(基于通达信插件编程规范的简单分析)

[转载]通达信插件选股(基于通达信插件编程规范的简单分析) 原文地址:通达信插件选股(基于通达信插件编程规范的简单分析)作者:哈尔滨猫猫 首先声明,鄙人是编程人员,不是股民.对选股概念了解甚少.本文仅作编程人员学习借鉴之用.不对选股理论进行探讨和解释. 以前有客户找我做过通达信插件选股的小任务,当时第一次接触面向接口(此类“接口”)编程,也是第一次接触到股票里相关的概念.最近由于接手一个任务,与上次开发相类似,故旧事重提,仔细研究一番.将个人学习研究所得知识与大家分享.在网上搜相关资料,可用的.

socket编程(一):简单回射C/S程序

服务端代码: //echoSvr.c #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdlib.h> #include <stdio.h> #include <errno.h> #include <str

点击使文字变文本框且可编辑的JS

模仿QQ空间布局时,为了模拟好友分组编辑部分,大量搜集js代码,经过多重比较和修改,终于提炼到了我目前为止遇到的比较实用的脚本了,其中我中意的优点:无需id定义,只定义类就可以,,代码简便,尤其适用后台,因为,朋友已成功运用于后台交互中,先提供代码,做个标记(PS:忘记从哪里下载的JS源码,但十分感谢作者大神...感谢...) <script>$(function() { //获取class为caname的元素 $(".t2").click(function() { var

编程其实很简单

编程其实很简单. 在<大道至简>这本书中我们可以发现那本满是作者心得与思考感悟的书竟然就只有百十来页,而其中写到的编程的精义篇中就多次强调了“编程是一件很简单的事,甚至是一件劳动活.” 作者在这本书中通过对<愚公移山>的理解.分析,将其转化为编程的思想,同时也证实了观点:编程序其实没有我们想象的那么难!码农们所要做的也没有那么复杂,需要我们做的不过就是自己想要做什么?要想实现什么效果?再将自己的想法解剖分离开来,仅此而已.在作者对于愚公的论述中我们可以看到编程的根本:顺序.分支和循

科技使人“变傻”八种方式:没导航就会迷路

参考消息网 7 月 28 日报道美国<赫芬顿邮报>网站 7 月 25 日发表文章称,人人都认为苹果手机和笔记本电脑是科技发展所带来的福利.从某些方面看,的确如此.比如说,适当地使用谷歌搜索,对你的大脑确实有益. 然而,科技进步也会带来意想不到的结果.神经科学家迈克尔·默策尼希说,我们的大脑正因科技发展而进行"大规模重置".他警告,科技对人类智能产生的影响可能会是"致命的". 科技究竟是如何扰乱人类大脑的呢? 1. 科技毁了睡眠 研究显示,智能手机.平板电

高雅音乐使你变得更聪明

增强创造力.提升思维能力的方法之一:音乐教育 音乐艺术教育是提升创新能力.增加创造力的最佳方法.听高雅音乐可使大脑分泌脑电吗啡,也就是"β内酚酞",并产生α波,创造力就可以尽情发挥.此处的音乐一定是高雅音乐,不是歌曲,如古典音乐莫扎特.贝多芬.中国十大名曲等,日本的"一休"那样的音乐是负"α波",一定是让自己舒服.安详.兴奋起来的音乐,何种音乐因人而异. 所谓脑电吗啡是使大脑更好地分泌脑内吗啡,也就是一种称为β内酚酞的物质,进行冥想的人大脑能分泌

Java 多线程编程两个简单的样例

/** * @author gao */ package gao.org; public class RunnableDemo implements Runnable{ @Override public void run() { // TODO Auto-generated method stub for(int i=0;i<10;i++){ System.out.println("新线程输出:"+i); } } public static void main(String []