珂珂的个人博客 - 一个程序猿的个人网站

WPF的MVVM实例(三)-ViewModel实现类

[原]WPF的MVVM实例(一)

[原]WPF的MVVM实例(二)-ViewModel基类

[原]WPF的MVVM实例(三)-ViewModel实现类

[原]WPF的MVVM实例(四)-列表页

[原]WPF的MVVM实例(五)-编辑页

                       

using Microsoft.Win32;
using MyList.Common;
using MyList.Entity;
using MyList.Model;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Threading;

namespace MyList.ViewModel
{
    public class RegisterViewModel : BaseViewModel    {
        public delegate void LoadedEventHandler(int total);

        public event LoadedEventHandler LoadedEvent;

        public RegisterViewModel(Dispatcher dispatcher)
            : base(dispatcher)
        {

        }

        public RegisterViewModel()
            : base()
        {

        }

        private db_myEntities dbContext = new db_myEntities();
        private IDAL.IRegister dal = new DAL.DRegister();

        protected async override void Save(object obj)
        {
            if (this.SaveData == null)
            {
                MessageBox.Show("没有数据供保存");
                return;
            }

            LoadingVisibility = Visibility.Visible;

            int result = 0;
            //新增的数据
            List addList = new List();

            await Task.Run(() =>
               {
                   foreach (var v in this.SaveData)
                   {
                       v.UPDATE_DATE = DateTime.Now;
                       //是否新增
                       bool isAdd = (v.registerID == null || v.registerID == "" || v.registerID == "0");
                       if (isAdd)
                       {
                           v.ADD_DATE = DateTime.Now;
                           v.registerID = Guid.NewGuid().ToString("N");
                           addList.Add(v);
                       }

                       dbContext = new db_myEntities();
                       my_tb_register model = v.CloneProperties();
                       dbContext.my_tb_register.Attach(model);
                       if (isAdd)
                       {
                           dbContext.Entry(model).State = System.Data.Entity.EntityState.Added;
                       }
                       else
                       {
                           dbContext.Entry(model).State = System.Data.Entity.EntityState.Modified;
                       }
                   }

                   int resullt = dbContext.SaveChanges();
               });

            LoadingVisibility = Visibility.Collapsed;

            //=0 也认为成功
            if (result >= 0)
            {
                MessageBox.Show("操作成功");
                //清除已经保存的数据
                this.SaveData = null;
                //向查询集合添加刚插入的数据
                _dispatcher.Invoke(
                 delegate
                 {
                     foreach (var v in addList)
                     {
                         QueryData.Insert(0, v);
                     }
                 });
            }
            else
            {
                MessageBox.Show("操作失败");
            }
        }

        protected async override void Delete(object obj)
        {
            if (MessageBox.Show("你真的要删除所选数据吗?", "提示", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.No)
            {
                return;
            }
            IEnumerable list = this.MdataGrid.SelectedItems as IEnumerable;
            if (list == null)
            {
                return;
            }

            LoadingVisibility = Visibility.Visible;

            int result = 0;
            await Task.Run(() =>
            {
                dbContext = new db_myEntities();
                foreach (var v in list)
                {
                    my_tb_register m = v.CloneProperties();
                    dbContext.my_tb_register.Attach(m);
                    dbContext.Entry(m).State = System.Data.Entity.EntityState.Deleted;
                    dbContext.my_tb_register.Remove(m);
                }

                result = dbContext.SaveChanges();
            });

            LoadingVisibility = Visibility.Collapsed;

            //=0 也认为成功
            if (result >= 0)
            {
                _dispatcher.Invoke(
                delegate
                {
                    while (list.Count() > 0)
                    {
                        RegisterModel m = (RegisterModel)list.ElementAt(0);
                        QueryData.Remove(m);
                    }
                    //不能用foreach 否则报集合已修改的错误
                    //for (int i = 0; i < list.Count(); i++)
                    //{
                    //    RegisterModel m = (RegisterModel)list.ElementAt(i);
                    //    QueryData.Remove(m);
                    //}
                });
                MessageBox.Show("删除成功");
            }
            else
            {
                MessageBox.Show("删除失败");
            }
        }

        protected async override void Query(object obj)
        {
            LoadingVisibility = Visibility.Visible;
            await Task.Run(() =>
            {
                if (QueryData == null)
                {
                    QueryData = new ObservableCollection();
                }
                else
                {
                    _dispatcher.Invoke(
                       delegate
                       {
                           QueryData.Clear();
                       });
                }

                IEnumerable list;
                if (obj == null)
                {
                    list = dbContext.my_tb_register.OrderByDescending(c => c.ADD_DATE).ToList();
                }
                else
                {
                    FYJ.Pager.GridPager pager = new FYJ.Pager.GridPager();
                    Func[] exp = null;
                    list = dal.GetList(ref pager, exp);
                }

                if (LoadedEvent != null)
                {
                    LoadedEvent(list.Count());
                }

                foreach (var v in list)
                {
                    RegisterModel m = v.CloneProperties();
                    _dispatcher.Invoke(
                        delegate
                        {
                            QueryData.Add(m);
                        });
                }
            });
            LoadingVisibility = Visibility.Collapsed;
        }


        protected override void Export(object obj)
        {
            IEnumerable srcList = MdataGrid.ItemsSource as IEnumerable;
            DataTable dt = ObjectHelper.IEnumerableToDataTable(srcList);
            dt.TableName = "my_tb_register";
            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.Filter = "Execl files (*.xls)|*.xls|XML文件(*.xml)|*.xml";

            if (saveFileDialog1.ShowDialog() == true)
            {
                if (System.IO.Path.GetExtension(saveFileDialog1.FileName) == ".xml")
                {
                    dt.WriteXml(saveFileDialog1.FileName, XmlWriteMode.WriteSchema);
                }
                else
                {
                    //DataTableToExcel te = new DataTableToExcel();
                    //te.SaveExcel(dt, "", saveFileDialog1.FileName, "sheet1");
                }
            }
        }
    }
}



上一篇:wordpress3.6 修改的地方

下一篇:个人代码全部开源


0 评论

查看所有评论

给个评论吧