Identify which subitem has been clicked

I have an SfMenu with three entries, each with a number of subitems.

In order to be able to display icons for menu and submenu items I have followed your suggestion and used a template for menu items and subitems.

How do I execute something when a specific menu entry is clicked? I do not seem to be able how to capture the click event, and I am not sure how I could bind a command to a template.

The code I am using is as follows:

XAML

Background="LightGray" Width="340">

Margin="3,0,0,0"/>


Model

public class MenuBarModel

{

private string header;

private string gestureText;

private object icon;

public MenuBarModel()

{

MenuItems = new ObservableCollection();

}


public ObservableCollection MenuItems { get; set; }



public string Header { get { return header; } set { header = value; } }


public string GestureText { get { return gestureText; } set { gestureText = value; } }


public object Icon

{

get { return icon; }

set { icon = value; }

}

}

ViewModel

class BooksViewModel

{

public ObservableCollection MenuModel { get; set; } = new ObservableCollection();

public ObservableCollection Menu { get; set; } = new ObservableCollection();


public ObservableCollection MainMenuItem { get; set; } = new ObservableCollection();


public ObservableCollection SubMenuItem { get; set; } = new ObservableCollection();



public BooksViewModel()

{

Menu = PopulateMenu();

}


private ObservableCollection PopulateMenu()

{


MenuBarModel shape = new MenuBarModel() { Header = "Shape" ,Icon= "/Resources/shapeIcon.png" };


MainMenuItem.Add(PopulateSubSubItems(shape));

MenuModel.Add(shape);

MenuBarModel order = new MenuBarModel() { Header = "Order by", Icon = "/Resources/contentIcon.png" };

MainMenuItem.Add(PopulateSubSubItems(order));

MenuModel.Add(order);

MenuBarModel sort = new MenuBarModel() { Header = "Sort", Icon = "/Resources/sortIcon.png" };

MainMenuItem.Add(PopulateSubSubItems(sort));

MenuModel.Add(sort);

return MainMenuItem;

}



private MenuBarModel PopulateSubSubItems(MenuBarModel item)

{

switch (item.Header)

{

case "Shape":

MenuBarModel menu1 = new MenuBarModel() { Header = "Grid" ,Icon= "/Resources/gridIcon.png" };

MenuBarModel menu2 = new MenuBarModel() { Header = "List" ,Icon="/Resources/listIcon.png" };

MenuBarModel menu3 = new MenuBarModel() { Header = "Accordion" ,Icon= "/Resources/accordionIcon.png" };

item.MenuItems.Add(menu1);

item.MenuItems.Add(menu2);

item.MenuItems.Add(menu3);

return item;

case "Order by":

MenuBarModel menu4 = new MenuBarModel() { Header = "Alpha", Icon = "/Resources/alphaIcon.png" };

MenuBarModel menu5 = new MenuBarModel() { Header = "Author", Icon = "/Resources/authorIcon.png" };

item.MenuItems.Add(menu4);

item.MenuItems.Add(menu5);

return item;

case "Sort":

MenuBarModel menu6 = new MenuBarModel() { Header = "Ascending", Icon = "/Resources/ascendingIcon.png" };

MenuBarModel menu7 = new MenuBarModel() { Header = "Descending", Icon = "/Resources/descendingIcon.png" };

item.MenuItems.Add(menu6);

item.MenuItems.Add(menu7);

return item;

}

return null;

}



3 Replies

VR Vijayalakshmi Roopkumar Syncfusion Team July 20, 2021 12:58 PM UTC

 
Hi Paul.  
 
Thank you for your update. 
 
You want to bound the Command associated with SubMenu, for this we have created the command property and bound it in xaml as shown in following code: 
 
XAML 
 
 
<menu:SfMenu.ItemTemplate> 
<primitives:HierarchicalDataTemplate ItemsSource="{Binding SubMenuItems}"> 
<DataTemplate> 
<Button 
Click="Button_Click" 
Command="{Binding ClickCommand}" 
Content="{Binding Header}" 
/> 
</DataTemplate> 
</primitives:HierarchicalDataTemplate> 
</menu:SfMenu.ItemTemplate> 
 
 
 
 
 
MenuBarModel file = new MenuBarModel() { Header = "File", ClickCommand = new DelegateCommand(propertychangedHandler) }; 
 
 
 
Please try this suggestion and let us know if it is helpful. 
 
Regards, 
Vijayalakshmi VR 



PG Paul G Mariotti July 21, 2021 05:48 AM UTC

Yes, I understand, but I would understand even more if you had given the correct link for the example cited above.

The link given gors to a project from a previous request of mine dealing with changing colors of menu items: SfMenu_Color.

Can you please send a link to the correct example?



EM Elakkiya Muthukumarasamy Syncfusion Team July 22, 2021 11:47 AM UTC

Hi Paul, 
 
Sorry for this inconvenience. 
 
We have added the code to bound the Command associated with SubMenu in the previously updated sample link. Please refer the video for the same. 
 
 
Please try this video and let us know if it is helpful. 
 
Regards, 
Elakkiya 


Loader.
Up arrow icon