如何显示DataGrid中显示的每条记录的特定列的运行总计?我想将计算逻辑保留在视图模型中。
期望的输出:
Value | Running Total 25 25 10 35 -2 33
谢谢你,
本
编辑请记住,当用户触发的DataGrid排序发生时,必须重新计算运行总计,因为记录显示顺序已更改。
我真的想把这个逻辑放在视图模型中,而不是在WPF代码中(例如不使用IValueConverter)。
答案 0 :(得分:0)
我不知道有一种推荐/支持/简单的方法来做到这一点。我能想到的选择是:
1)在数据网格之外有一些ui元素来保存总数。这很容易绑定到您的VM,但要解决将出现的对齐问题有点痛苦,因为您可能希望在列下完全正确。这就是我的建议
2)在网格中有一个虚拟的最后一行;这解决了对齐问题,但为虚拟机添加了黑客逻辑,并且可能看起来不那么好。
HTH,
Berryl
答案 1 :(得分:0)
如果您不介意在VB或C#中回答,那么this tutorial会显示如何在VB中执行您想要的操作,this tutorial在C#中显示它。两者都在网格中使用虚拟列。
答案 2 :(得分:0)
查看此答案,了解如何将行计数列添加到ListBox并使用值转换器填充。而不是计算项目,加上项目的总和。如果您需要VM中的总和,这当然不是一个好的解决方案。
答案 3 :(得分:0)
唯一的想法是:实际上,DataGrid使用ICollectionView接口(http://msdn.microsoft.com/en-us/library/system.componentmodel.icollectionview.aspx)来实现排序(如http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid(VS.95).aspx中分组,排序和过滤部分所述。< / p>
因此,您可以创建实现ICollectionView接口的类,并通过相应的运行总计更新来观察排序。
答案 4 :(得分:0)
我最终通过扩展DataGrid以暴露一个属性来解决这个问题,该属性可以绑定到视图模型上的“度假已发生”回调。
详细信息:http://bengribaudo.com/blog/2010/07/14/3/datagrid-per-row-running-totals
答案 5 :(得分:0)
long cumulative = 0;
List<int> Values = GetValues();
Values.ForEach(v => v.RunningTotal = cumulative = cumulative + v.Value);
您可以对整个列表运行 foreach ,并通过公式
来获得运行总计
(RunningTotal =累积=累积+值);
我们需要连续保存以前的值。