Category / Section
How to Set SfRadialMenu as the Context menu for the SfDataGrid ?
5 mins read
SfRadialMenu can be used as context menu of the SfDataGrid by set the SfRadialMenu as ControlTemplate of ContextMenu. The same has been explained in the below “HeaderContext” style.
<Style x:Key="Headercontext" TargetType="ContextMenu">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<syncfusion:SfRadialMenu>
<syncfusion:SfRadialMenuItem Header="Ascending" Command="{Binding
Source={x:Static
Member=local:ContextMenuCommands.SortAscending}}"
CommandParameter="{Binding}"/>
<syncfusion:SfRadialMenuItem Header="Descending" Command="{Binding
Source={x:Static
Member=local:ContextMenuCommands.SortDescending}}"
CommandParameter="{Binding}"/>
</syncfusion:SfRadialMenu>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Ascending and Descending command functions
#region SortAscending
static BaseCommand sortAscending;
public static BaseCommand SortAscending
{
get
{
if (sortAscending == null)
sortAscending = new BaseCommand(OnSortAscendingClicked,
CanSortAscending);
return sortAscending;
}
}
private static void OnSortAscendingClicked(object obj)
{
if (obj is GridColumnContextMenuInfo)
{
var grid = (obj as GridContextMenuInfo).DataGrid;
var column = (obj as GridColumnContextMenuInfo).Column;
grid.SortColumnDescriptions.Clear();
grid.SortColumnDescriptions.Add(new SortColumnDescription() {
ColumnName = column.MappingName,
SortDirection = ListSortDirection.Ascending });
}
}
private static bool CanSortAscending(object obj)
{
if (obj is GridColumnContextMenuInfo)
{
var grid = (obj as GridContextMenuInfo).DataGrid;
var column = (obj as GridColumnContextMenuInfo).Column;
var sortColumn = grid.SortColumnDescriptions.FirstOrDefault(x =>
x.ColumnName == column.MappingName);
if (sortColumn != null)
{
if ((sortColumn as SortColumnDescription).SortDirection ==
ListSortDirection.Ascending)
return false;
}
return grid.AllowSorting;
}
return false;
}
#endregion
#region SortDescending
static BaseCommand sortDescending;
public static BaseCommand SortDescending
{
get
{
if (sortDescending == null)
sortDescending = new BaseCommand(OnSortDescendingClicked,
CanSortDescending);
return sortDescending;
}
}
private static void OnSortDescendingClicked(object obj)
{
if (obj is GridColumnContextMenuInfo)
{
var grid = (obj as GridContextMenuInfo).DataGrid;
var column = (obj as GridColumnContextMenuInfo).Column;
grid.SortColumnDescriptions.Clear();
grid.SortColumnDescriptions.Add(new SortColumnDescription() {
ColumnName = column.MappingName, SortDirection =
ListSortDirection.Descending });
}
}
private static bool CanSortDescending(object obj)
{
if (obj is GridColumnContextMenuInfo)
{
var grid = (obj as GridContextMenuInfo).DataGrid;
var column = (obj as GridColumnContextMenuInfo).Column;
var sortColumn = grid.SortColumnDescriptions.FirstOrDefault(x =>
x.ColumnName == column.MappingName);
if (sortColumn != null)
{
if ((sortColumn as SortColumnDescription).SortDirection ==
ListSortDirection.Descending)
return false;
}
return grid.AllowSorting;
}
return false;
}
#endregion
