/// <summary> /// Adds the menu. /// </summary> /// <param name="menu">The menu.</param> /// <param name="parent">The parent.</param> private void AddMenu(Menu menu, ItemsControl parent) { // Prevent infinite loop if (menu.SubMenus.Count > 0) { foreach (var submenu in menu.SubMenus) { var item = new TreeViewItem { Header = submenu.DisplayName, IsExpanded = true, Tag = submenu }; // GOOD OL' RECURSION this.AddMenu(submenu, item); parent.Items.Add(item); } } foreach ( var treeItem in menu.Items.Select(item => new TreeViewItem { Header = item.DisplayName, Tag = item })) { parent.Items.Add(treeItem); } }
/// <summary> /// Handles the Click event of the LoadButton control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="System.Windows.RoutedEventArgs" /> instance containing the event data.</param> private void LoadButtonClick(object sender, RoutedEventArgs e) { var dialog = new OpenFileDialog { DefaultExt = ".json", Filter = "JSON File (*.json}|*.json" }; var result = dialog.ShowDialog(this); if (result != true) { return; } this.Menu = JsonConvert.DeserializeObject <Menu>( File.ReadAllText(dialog.FileName), new JsonSerializerSettings() { PreserveReferencesHandling = PreserveReferencesHandling.Objects, ReferenceLoopHandling = ReferenceLoopHandling.Serialize }); this.UpdateTree(); }
/// <summary> /// Handles the Click event of the LoadButton control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="System.Windows.RoutedEventArgs" /> instance containing the event data.</param> private void LoadButtonClick(object sender, RoutedEventArgs e) { var dialog = new OpenFileDialog { DefaultExt = ".json", Filter = "JSON File (*.json}|*.json" }; var result = dialog.ShowDialog(this); if (result != true) { return; } this.Menu = JsonConvert.DeserializeObject<Menu>( File.ReadAllText(dialog.FileName), new JsonSerializerSettings() { PreserveReferencesHandling = PreserveReferencesHandling.Objects, ReferenceLoopHandling = ReferenceLoopHandling.Serialize }); this.UpdateTree(); }