问题
利用CollectionViewSource进行分组后发现原始只有计算机行数的属性,但并没有计算自定义某列数据总和的方法,以下是解决方案。
解决方案
【代码】
internal class GroupSum : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
long total = 0;
// DataGrid分组后对应的组及组内元素CollectionViewGroup.Items 类型是ReadOnlyObservableCollection<object>
if (value is ReadOnlyObservableCollection<object> items)
{
foreach (var item in items)
{
var fileItem = item as FileItem;
total += fileItem.Size;
}
}
//return Math.Round(total, 2).ToString();
return ConvertBytesToSize(total);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
使用
加载
xmlns:local="clr-namespace:XXXX.ViewModel"
<local:GroupSum x:Key="GroupSum" />
前端
<CollectionViewSource x:Key="CollectionViewSource" Source="{Binding Path=ResultList,Mode=TwoWay}" >
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Describe"/>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
Describe为分组字段
<TextBlock FontWeight="Bold" Margin="10,0,0,0">
<TextBlock.Text>
<Binding Converter="{StaticResource GroupSum}" Path="Items" ConverterParameter="ItemCount" StringFormat="占用内存:{0}" />
</TextBlock.Text>
</TextBlock>