private void CalculateMenuItems(ICollection <INavigationMenuDescriptor> menuDescriptors, ICollection <SmallNavigationMenuItem> menuItems) { if (menuDescriptors == null) { return; } foreach (var menuDescriptor in menuDescriptors) { var menuItem = new SmallNavigationMenuItem { DataContext = menuDescriptor }; menuItem.SetBinding(SmallNavigationMenuItem.ItemTemplateProperty, new Binding(menuDescriptor.IsRoot ? "RootItemTemplate" : "LeafItemTemplate") { Source = this }); menuItem.AddHandler(SmallNavigationMenuItem.SelectionChangedEvent, new RoutedPropertyChangedEventHandler <bool>(OnSmallNavigationMenuItemSelectionChanged)); menuItems.Add(menuItem); if (!(menuDescriptor.Items?.Any() ?? false)) { continue; } if (menuItem.MenuItems == null) { menuItem.MenuItems = new List <SmallNavigationMenuItem>(); } CalculateMenuItems(menuDescriptor.Items, menuItem.MenuItems); } }
private void UnselectOldSelectedMenuItems(SmallNavigationMenuItem 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) { item.ClosePopup(); if (item.MenuItems?.All(x => !Equals(x, selectedMenuItem)) ?? true) { item.IsSelected = false; } } }
private void SelectMenuItem(SmallNavigationMenuItem item) { SelectedItem = item.DataContext as INavigationMenuDescriptor; SelectedMenuItem = item; UnselectOldSelectedMenuItems(item); }