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
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
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
public ObservableCollection
public ObservableCollection
public ObservableCollection
public BooksViewModel()
{
Menu = PopulateMenu();
}
private ObservableCollection
{
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;
}
<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) };
|
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?