在我们用MVVM框架做项目,在做到新增、删除等功能的时候,新增和删除成功后就会遇到一个问题,那就是数据的刷新。
怎样做到刷新的呢,其实刷新说白了就是重新查询下数据,只要我们调用一下查询的方法
就可以了。
当我删除数据时,因为删除操作和数据查询操作可以在同一个ViewModel中,所以我们在写删除的时候可以直接调用查询方法。
这是我写的查询方法:
private void GetAllCommodityBy() { var list = (from tbCommodity in myModel.PW_Commodity join tbCommodtyType in myModel.PW_CommodityType on tbCommodity.CommodityTypeID equals tbCommodtyType.CommodityTypeID join tbUnit in myModel.PW_Unit on tbCommodity.UnitID equals tbUnit.UnitID join tbInventory in myModel.PW_Inventory on tbCommodity.InventoryID equals tbInventory.InventoryID select new CommodityVos { CommodityID=tbCommodity.CommodityID, InventoryID=tbInventory.InventoryID, CommodityNumber=tbCommodity.CommodityNumber, CommodityName=tbCommodity.CommodityName, CommodityTypeName=tbCommodtyType.CommodityTypeName, UnitName=tbUnit.UnitName, Specification=tbCommodity.Specification, InventoryFloor=tbInventory.InventoryFloor, TheCurrentInventory=tbInventory.TheCurrentInventory, WhetherGive=tbCommodity.WhetherGive, WhetherForbidden=tbCommodity.WhetherForbidden, TheDefaultSetting=tbCommodity.TheDefaultSetting, BarCode=tbCommodity.BarCode, Remark=tbCommodity.Remark }).ToList(); Commodity = list; }
这是删除后调用查询方法:
if (myModel.SaveChanges() > 0) { MessageBox.Show("删除成功", "系统提示", MessageBoxButton.OK, MessageBoxImage.Information); GetAllCommodityBy(); }
这是删除前的表格:
我选择最后一条数据删除
当删除成功后点击确定,表格就会刷新了:
而新增操作和查询操作不在一个ViewModel怎么办呢,这时候我们就要用到委托了。
我们在新增的ViewModel中声明一个委托:
//委托 public delegate void LodedSelect(); public event LodedSelect LodedCommodity;
然后我们在查询的ViewModel中把查询方法赋值给这个委托:
private void AddCommodity(Window window) { CommodityAdd addOrCommodityWindow = new CommodityAdd(); var Commoditys = (addOrCommodityWindow.DataContext as CommodityAddViewModel); Commoditys.LodedCommodity += GetAllCommodityBy; addOrCommodityWindow.Show(); }
再然后我们在新增操作中用上这个委托就可以了。
if (myModel.SaveChanges() > 0) { MessageBox.Show("新增成功", "系统提示", MessageBoxButton.OK, MessageBoxImage.Information); window1.Close(); LodedCommodity?.Invoke(); }
在我刚才删除数据的表格上新增一条“榴莲”的数据,
当我点击“确定”后,新增页面关闭并表格刷新: