private void CalculateMenuItems(ICollection <INavigationMenuDescriptor> menuDescriptors, ICollection <NavigationMenuItem> menuItems) { if (menuDescriptors == null) { return; } foreach (var menuDescriptor in menuDescriptors) { var menuItem = new NavigationMenuItem { DataContext = menuDescriptor }; menuItem.SetBinding(NavigationMenuItem.ItemTemplateProperty, new Binding(menuDescriptor.IsRoot ? "RootItemTemplate" : "LeafItemTemplate") { Source = this }); menuItem.AddHandler(NavigationMenuItem.SelectionChangedEvent, new RoutedPropertyChangedEventHandler <bool>(OnNavigationMenuItemSelectionChanged)); menuItems.Add(menuItem); if (!(menuDescriptor.Items?.Any() ?? false)) { continue; } if (menuItem.MenuItems == null) { menuItem.MenuItems = new List <NavigationMenuItem>(); } CalculateMenuItems(menuDescriptor.Items, menuItem.MenuItems); } }
private void UnselectOldSelectedMenuItems(NavigationMenuItem selectedMenuItem) { var oldSelectedMenuItems = MenuItems.Where(item => item.MenuItems != null) .SelectMany(item => item.MenuItems) .Concat(MenuItems) .Where(item => !Equals(item, selectedMenuItem)) .Where(item => item.IsSelected) .ToArray(); foreach (var item in oldSelectedMenuItems) { if (!(item.MenuItems?.Any(subItem => subItem.Equals(selectedMenuItem)) ?? false)) { item.IsSelected = false; } } }
private void SelectMenuItem(NavigationMenuItem item) { SelectedItem = item.DataContext as INavigationMenuDescriptor; SelectedMenuItem = item; UnselectOldSelectedMenuItems(item); }