public void InitControl(NavMenuItem item) { if (item == null) return; if (Segments.Any()) { Segments.Clear(); stkRoot.Children.Clear(); } var control = new NavigationControlSegment() { CurrentLevel = 0 }; control.NavMenuClickEvent += OnNavMenuClick; var items = new ObservableCollection<NavMenuItem>(); var menuItem = new NavMenuItem() { Title = "Вся компания", Id = item.Id }; menuItem.Items.AddRange(item.Items); items.Add(menuItem); control.NavItems = items; control.Status = NavSegmentStatus.Current; stkRoot.Children.Add(control); if (!Segments.ContainsKey(control.CurrentLevel)) { Segments.Add(control.CurrentLevel, control); } else { // // if (control.NavItems.Any ()) { // foreach (var segment in Segments) { // if (segment.Key < control.CurrentLevel) { // segment.Value.Status = NavSegmentStatus.Previous; // } // } // } Segments[control.CurrentLevel] = control; } control.SelectFirstItem(); }
void OnNavMenuClick(object sender, NavMenuEventArgs e) { if (e == null) return; var ctrl = sender as NavigationControlSegment; if (ctrl == null) return; if (ctrl.NavItems.Any()) { foreach (var segment in Segments) { if (segment.Key < ctrl.CurrentLevel) { segment.Value.Status = NavSegmentStatus.Previous; } } ctrl.Status = NavSegmentStatus.Current; if (ctrl.SelectedItem.Items.Any()) { if (!Segments.ContainsKey(e.CurrentLevel + 1)) { var childControl = new NavigationControlSegment() { CurrentLevel = e.CurrentLevel + 1 }; childControl.NavItems = new ObservableCollection<NavMenuItem>(ctrl.SelectedItem.Items); childControl.NavMenuClickEvent += OnNavMenuClick; childControl.Status = NavSegmentStatus.NotSelected; Segments.Add(e.CurrentLevel + 1, childControl); stkRoot.Children.Add(childControl); } else { var existChldControl = Segments[e.CurrentLevel + 1]; existChldControl.NavMenuClickEvent -= OnNavMenuClick; existChldControl.NavItems = new ObservableCollection<NavMenuItem>(ctrl.SelectedItem.Items); existChldControl.Status = NavSegmentStatus.NotSelected; existChldControl.NavMenuClickEvent += OnNavMenuClick; } } } var handler = NeedRefreshMatrixEvent; if (handler != null) { StringBuilder title = new StringBuilder(); StringBuilder id = new StringBuilder(); foreach (var s in Segments) { if (s.Value != null && s.Value.Status != NavSegmentStatus.None && s.Value.Status != NavSegmentStatus.NotSelected) { if (s.Value.SelectedItem != null) { if (title.Length > 0) title.Append(" > "); title.Append(s.Value.SelectedItem.Title); if (id.Length > 0) id.Append("."); id.Append(s.Value.SelectedItem.Id); } } } handler(this, new NavMenuPresentationEventArgs() { ObjectId = id.ToString(), ObjectTitle = title.ToString() }); } }