Workaround: public Form1() { InitializeComponent(); this.radPivotFieldList1.ValuesControl.CreatingVisualListItem += Aggregates_CreatingVisualListItem; } private void Aggregates_CreatingVisualListItem(object sender, Telerik.WinControls.UI.CreatingVisualListItemEventArgs args) { args.VisualItem = new MyPivotFieldListVisualItem(this.radPivotFieldList1.ViewModel); } public class MyPivotFieldListVisualItem : PivotFieldListVisualItem { private FieldListViewModel viewModel; private CommandBarDropDownButton button; private RadMenuItem sumMenuItem; private RadMenuItem avgMenuItem; private RadMenuItem countMenuItem; public MyPivotFieldListVisualItem(FieldListViewModel viewModel) : base(viewModel) { this.viewModel = viewModel; } protected override void CreateChildElements() { base.CreateChildElements(); this.sumMenuItem = this.GetType().BaseType .GetField("sumMenuItem", BindingFlags.Instance | BindingFlags.NonPublic) .GetValue(this) as RadMenuItem; this.avgMenuItem = this.GetType().BaseType .GetField("avgMenuItem", BindingFlags.Instance | BindingFlags.NonPublic) .GetValue(this) as RadMenuItem; this.countMenuItem = this.GetType().BaseType .GetField("countMenuItem", BindingFlags.Instance | BindingFlags.NonPublic) .GetValue(this) as RadMenuItem; if (sumMenuItem != null && avgMenuItem != null && countMenuItem != null) { sumMenuItem.Click += OnAggregateFunctionClick; avgMenuItem.Click += OnAggregateFunctionClick; countMenuItem.Click += OnAggregateFunctionClick; } this.button = this.GetType().BaseType .GetField("button", BindingFlags.Instance | BindingFlags.NonPublic) .GetValue(this) as CommandBarDropDownButton; RadMenuItem aggregateOptionsMenuItem = this.GetType().BaseType .GetField("aggregateOptionsMenuItem", BindingFlags.Instance | BindingFlags.NonPublic) .GetValue(this) as RadMenuItem; aggregateOptionsMenuItem.Click += aggregateOptionsMenuItem_Click; RadMenuItem numberFormatMenuItem = this.GetType().BaseType .GetField("numberFormatMenuItem", BindingFlags.Instance | BindingFlags.NonPublic) .GetValue(this) as RadMenuItem; numberFormatMenuItem.Click += numberFormatMenuItem_Click; } private void numberFormatMenuItem_Click(object sender, EventArgs e) { Value value = (this.Data.DataBoundItem as Value); if (value == null) { return; } MyNumberFormatOptionsDialog dialog = new MyNumberFormatOptionsDialog(); dialog.ThemeName = this.GetThemeName(); QueryableAggregateDescription queryableAggregateDescription = (value.Description as QueryableAggregateDescription); if (queryableAggregateDescription != null) { dialog.LoadQueryableSettings(queryableAggregateDescription); } System.Windows.Forms.DialogResult result = dialog.ShowDialog(); if (result == System.Windows.Forms.DialogResult.OK) { queryableAggregateDescription.StringFormat = dialog.SelectedStringFormat; this.viewModel.ExecuteUpdate(); } } private void aggregateOptionsMenuItem_Click(object sender, EventArgs e) { MyAggregateOptionsDialog dialog = new MyAggregateOptionsDialog(); dialog.ThemeName = this.GetThemeName(); Value value = (this.Data.DataBoundItem as Value); if (value != null) { QueryablePropertyAggregateDescriptionBase queryableAggregateDescription = (value.Description as QueryablePropertyAggregateDescriptionBase); if (queryableAggregateDescription != null) { dialog.LoadQueryableSettings(queryableAggregateDescription); } System.Windows.Forms.DialogResult result = dialog.ShowDialog(); if (result == System.Windows.Forms.DialogResult.OK) { queryableAggregateDescription.AggregateFunction = dialog.SelectedQueryableAggregateFunction; queryableAggregateDescription.CustomName = dialog.CustomName; this.Synchronize(); this.viewModel.ExecuteUpdate(); } } } private void OnAggregateFunctionClick(object sender, EventArgs e) { Value value = (this.Data.DataBoundItem as Value); string function = ((RadMenuItem)sender).Text; if (value != null && this.SetNewAggregateFunction(value.Description, function)) { this.Synchronize(); this.viewModel.ExecuteUpdate(); } } private bool SetNewAggregateFunction(IAggregateDescription description, string function) { QueryablePropertyAggregateDescriptionBase queryableDescription = (description as QueryablePropertyAggregateDescriptionBase); if (queryableDescription != null) { switch (function) { case "Sum": queryableDescription.AggregateFunction = QueryableAggregateFunction.Sum; break; case "Count": queryableDescription.AggregateFunction = QueryableAggregateFunction.Count; break; case "Average": queryableDescription.AggregateFunction = QueryableAggregateFunction.Average; break; default: return false; } return true; } return false; } protected override void SynchronizeProperties() { base.SynchronizeProperties(); Value value = (this.Data.DataBoundItem as Value); Label label = (this.Data.DataBoundItem as Label); if (value != null) { #if !NETFX2 QueryablePropertyAggregateDescription queryableDescription = (value.Description as QueryablePropertyAggregateDescription); if (queryableDescription != null) { this.sumMenuItem.IsChecked = queryableDescription.AggregateFunction == QueryableAggregateFunction.Sum; this.countMenuItem.IsChecked = queryableDescription.AggregateFunction == QueryableAggregateFunction.Count; this.avgMenuItem.IsChecked = queryableDescription.AggregateFunction == QueryableAggregateFunction.Average; } #endif } } private string GetThemeName() { if (this.ElementTree == null) { return string.Empty; } RadControl control = this.ElementTree.Control as RadControl; return control != null ? control.ThemeName : string.Empty; } } public class MyAggregateOptionsDialog : AggregateOptionsDialog { private RadListControl listAggregateFunctions; private RadLabel labelFieldName; private RadTextBox textBoxCustomName; public MyAggregateOptionsDialog() { this.listAggregateFunctions = this.GetType().BaseType .GetField("listAggregateFunctions", BindingFlags.Instance | BindingFlags.NonPublic) .GetValue(this) as RadListControl; this.labelFieldName = this.GetType().BaseType .GetField("labelFieldName", BindingFlags.Instance | BindingFlags.NonPublic) .GetValue(this) as RadLabel; this.textBoxCustomName = this.GetType().BaseType .GetField("textBoxCustomName", BindingFlags.Instance | BindingFlags.NonPublic) .GetValue(this) as RadTextBox; } private readonly IList<QueryableAggregateFunction> availableQueryableAggregateFunctions = new List<QueryableAggregateFunction>() { QueryableAggregateFunction.Sum, QueryableAggregateFunction.Count, QueryableAggregateFunction.Average, QueryableAggregateFunction.Max, QueryableAggregateFunction.Min }; public virtual QueryableAggregateFunction SelectedQueryableAggregateFunction { get { return (QueryableAggregateFunction)this.listAggregateFunctions.SelectedValue; } } public virtual void LoadQueryableSettings(QueryablePropertyAggregateDescriptionBase aggregateDescription) { if (this.listAggregateFunctions.DataSource != null) { this.listAggregateFunctions.DataSource = availableQueryableAggregateFunctions; } this.listAggregateFunctions.SelectedValue = aggregateDescription.AggregateFunction; this.labelFieldName.Text = aggregateDescription.PropertyName; this.Text = String.Format("{0}{1}{2}", "Aggregate Options (", aggregateDescription.PropertyName, ")"); this.textBoxCustomName.Text = aggregateDescription.CustomName; } } public class MyNumberFormatOptionsDialog : NumberFormatOptionsDialog { private TextBox textBox; public MyNumberFormatOptionsDialog() { RadDropDownList dropDownListFormat = this.GetType().BaseType .GetField("dropDownListFormat", BindingFlags.Instance | BindingFlags.NonPublic) .GetValue(this) as RadDropDownList; this.textBox = (TextBox)dropDownListFormat.DropDownListElement.EditableElement.TextBox.TextBoxItem.HostedControl; } public virtual void LoadQueryableSettings(QueryableAggregateDescriptionBase aggregateDescription) { this.textBox.Text = aggregateDescription.StringFormat; this.Text = String.Format(PivotGridLocalizationProvider.CurrentProvider.GetLocalizedString(PivotStringId.NumberFormatOptionsDialogFormatOptionsDescription), aggregateDescription.DisplayName); this.textBox.Select(this.textBox.Text.Length, 0); this.textBox.Focus(); } }