.NET MAUI DataGrid Property Aggregate Descriptor
The PropertyAggregateDescriptor allows you to define a property and a function that are applied over the property values of the .NET MAUI DataGrid, which accumulates an aggregated result based on the component data.
To set up the PropertyAggregateDescriptor, use the following properties:
PropertyName—Defines the name of the property that is used to compute the aggregate value.Function—Defines aKnownFunctionvalue that will be applied to the aggregate.Caption—Defines the caption of the aggregate. You can useCaptionto display text in the UI.Format—Defines the string format that will be applied over the aggregated value.
The PropertyAggregateDescriptor supports the following KnownFunction aggregates:
Sum—TheSumfunction summarizes all values in the column.Min—TheMinimumvalue of the cells in the column.Max—TheMaximumvalue of the cells in the column.Average—TheAveragevalue of the cells in the column.Count—TheCOUNTfunction counts the items in the column.Product—ThePRODUCTfunction multiplies all the numbers given as arguments and returns the product.StdDev—TheStandard Deviationis a measure of how widely values are dispersed from the average value, based on a sample function.StdDevP—TheStandard Deviationis a measure of how widely values are dispersed from the average value, based on the entire population function.Var—TheVarianceis a measure of dispersion, based on a sample function.VarP—TheVarianceis a measure of dispersion, based on the entire population function.
The following example shows how to add a PropertyAggregateDescriptor to the DataGrid's columns.
The DataGrid takes the values from the Name, Price, DeliveryPrice and Quantity properties of the row model and the result will be the Min, Max, and Average delivery prices, as well as the Count of the listed items.
1. Define the DataGrid in XAML:
<telerik:RadDataGrid x:Name="dataGrid"
ItemsSource="{Binding Peripherals}"
UserGroupMode="Disabled"
AutoGenerateColumns="False"
UserEditMode="Cell"
ShowColumnFooters="True">
<telerik:RadDataGrid.Columns>
<telerik:DataGridTextColumn PropertyName="Name">
<telerik:DataGridTextColumn.AggregateDescriptors>
<telerik:PropertyAggregateDescriptor PropertyName="Name"
Function="Count"
Caption="Total count: " />
</telerik:DataGridTextColumn.AggregateDescriptors>
</telerik:DataGridTextColumn>
<telerik:DataGridNumericalColumn PropertyName="Price"
CellContentFormat="{}{0:C}">
<telerik:DataGridNumericalColumn.AggregateDescriptors>
<telerik:PropertyAggregateDescriptor PropertyName="Price"
Function="Min"
Format="C"
Caption="Cheapest item: " />
<telerik:PropertyAggregateDescriptor PropertyName="Price"
Function="Max"
Format="C"
Caption="Priciest item: " />
</telerik:DataGridNumericalColumn.AggregateDescriptors>
</telerik:DataGridNumericalColumn>
<telerik:DataGridNumericalColumn PropertyName="DeliveryPrice"
HeaderText="Delivery Price"
CellContentFormat="{}{0:C}">
<telerik:DataGridNumericalColumn.AggregateDescriptors>
<telerik:PropertyAggregateDescriptor PropertyName="DeliveryPrice"
Function="Average"
Format="C"
Caption="Average: " />
</telerik:DataGridNumericalColumn.AggregateDescriptors>
</telerik:DataGridNumericalColumn>
<telerik:DataGridNumericalColumn PropertyName="Quantity">
<telerik:DataGridNumericalColumn.AggregateDescriptors>
<telerik:PropertyAggregateDescriptor PropertyName="Quantity"
Function="Sum"
Caption="Total amount: " />
</telerik:DataGridNumericalColumn.AggregateDescriptors>
</telerik:DataGridNumericalColumn>
</telerik:RadDataGrid.Columns>
<telerik:RadDataGrid.BindingContext>
<local:ViewModel />
</telerik:RadDataGrid.BindingContext>
</telerik:RadDataGrid>
2. Add the telerik namespace:
xmlns:telerik="http://schemas.telerik.com/2022/xaml/maui"
3. Define a sample data:
public class Data : NotifyPropertyChangedBase
{
private string name;
private double price;
private double deliveryPrice;
private int quantity;
public string Name
{
get => this.name;
set
{
if (value != this.name)
{
this.name = value;
this.OnPropertyChanged();
}
}
}
public double Price
{
get => this.price;
set
{
if (value != this.price)
{
this.price = value;
this.OnPropertyChanged();
}
}
}
public double DeliveryPrice
{
get => this.deliveryPrice;
set
{
if (value != this.deliveryPrice)
{
this.deliveryPrice = value;
this.OnPropertyChanged();
}
}
}
public int Quantity
{
get => this.quantity;
set
{
if (value != this.quantity)
{
this.quantity = value;
this.OnPropertyChanged();
}
}
}
}
4. Define the ViewModel:
public class ViewModel
{
public ViewModel()
{
this.Peripherals = new ObservableCollection<Data>
{
new Data { Name = "KeyBoard", Price = 24.6, DeliveryPrice = 2, Quantity = 32 },
new Data { Name = "Mouse", Price = 30.9, DeliveryPrice = 2, Quantity = 54 },
new Data { Name = "Video Card", Price = 760.7, DeliveryPrice = 3, Quantity = 17 },
new Data { Name = "Motherboard", Price = 210.4, DeliveryPrice = 4, Quantity = 12 },
new Data { Name = "SSD", Price = 42.9, DeliveryPrice = 3, Quantity = 88 },
new Data { Name = "RAM", Price = 50, DeliveryPrice = 4, Quantity = 126 }
};
}
public ObservableCollection<Data> Peripherals { get; set; }
}
The following image shows the end result.

For the DataGrid
PropertyAggregateDescriptorexample refer to the SDKBrowser Demo application and navigate to the DataGrid > Aggregates category.