[原]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");
}
}
}
}
}