【发布时间】:2017-03-03 18:43:54
【问题描述】:
我有一个 DataGrid,其中包含有关产品的信息,例如名称和价格, 可以通过按下 DEL 键(删除大小写)在 DataGrid 中添加或删除项目。
我使用 ObservableCollection 作为 DataGrid 源,它看起来像这样:
ObservableCollection<ProductTemporary> result = ProductsTempController.Instance.SelectAll();
我的窗口上还有一个按钮,它一直在更新我的产品价格总和,添加项目时总和增加,删除项目时总和减少等等......
在我的情况下,我在从我的收藏中删除项目时遇到问题,好吧,正如我所说的,我是通过按 DEL 键来完成的,所以这是我的代码:
if (e.Key == Key.Delete)
{
if (dataGridProducts.SelectedItem != null)
{
ProductTemporary tempItem = (ProductTemporary)dataGridProducts.SelectedItem;
ProductTemporaryController.Instance.Delete(tempItem.Id);
UpdateTotalAmount();
}
}
public void UpdateTotalAmount()
{
double sum = 0;
foreach (var item in result)
{
sum += Convert.ToDouble(item.TotalAmount);
}
btnTotal.Content = string.Format("{0:0.00}", sum) + " " + EUR;
}
可以看到,首先我要从数据库中删除项目,ObservableCollection 会小心地将其从 UI 中删除,但在这种情况下我仍然遇到问题:
假设datagrid上有2个项目,当用户按下del时,项目将从数据库中删除,但方法UpdateTotalAmount();之后会被调用,在我的集合中会有两个项目,我会看到不正确的总和..
所以我可能没有在正确的地方调用这个 UpdateTotalAmount 或类似的东西,
我也想过这个解决方案:
在删除项目的存储过程中,我可以从数据库中发回总项目的总和,所以在这种情况下,我不需要循环任何集合来做那样的事情,但我认为这不是一个好习惯?
谢谢各位, 干杯
【问题讨论】:
-
FWIW 这种东西在使用 MVVM 时往往更容易
-
@BradleyDotNET FWIW?
-
物有所值
-
@Roxy'Pro,从源对象而不是控件中删除所选项目。即使更新控件,可观察集合也应该引发属性更改
-
@Roxy'Pro,显然选择会改变,你正在删除一个项目
标签: c# wpf collections datagrid