在我们用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();
}
在我刚才删除数据的表格上新增一条“榴莲”的数据,
当我点击“确定”后,新增页面关闭并表格刷新: