.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 aKnownFunction
value that will be applied to the aggregate.Caption
—Defines the caption of the aggregate. You can useCaption
to 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
—TheSum
function summarizes all values in the column.Min
—TheMinimum
value of the cells in the column.Max
—TheMaximum
value of the cells in the column.Average
—TheAverage
value of the cells in the column.Count
—TheCOUNT
function counts the items in the column.Product
—ThePRODUCT
function multiplies all the numbers given as arguments and returns the product.StdDev
—TheStandard Deviation
is a measure of how widely values are dispersed from the average value, based on a sample function.StdDevP
—TheStandard Deviation
is a measure of how widely values are dispersed from the average value, based on the entire population function.Var
—TheVariance
is a measure of dispersion, based on a sample function.VarP
—TheVariance
is 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
PropertyAggregateDescriptor
example refer to the SDKBrowser Demo application and navigate to the DataGrid > Aggregates category.