void BuildTree() { RootNames = new ObservableCollection<NameViewModel>(); AllNames = new List<NameViewModel>(); var systemViewModel = new NameViewModel(JournalSubsystemType.System); systemViewModel.IsExpanded = true; RootNames.Add(systemViewModel); var gkViewModel = new NameViewModel(JournalSubsystemType.GK); gkViewModel.IsExpanded = true; RootNames.Add(gkViewModel); var skdViewModel = new NameViewModel(JournalSubsystemType.SKD); skdViewModel.IsExpanded = true; RootNames.Add(skdViewModel); var videoViewModel = new NameViewModel(JournalSubsystemType.Video); videoViewModel.IsExpanded = true; RootNames.Add(videoViewModel); foreach (JournalEventNameType journalEventNameType in Enum.GetValues(typeof(JournalEventNameType))) { var nameViewModel = new NameViewModel(journalEventNameType); if (nameViewModel.JournalEventNameType == JournalEventNameType.NULL) continue; AllNames.Add(nameViewModel); switch (nameViewModel.JournalSubsystemType) { case JournalSubsystemType.System: systemViewModel.AddChild(nameViewModel); break; case JournalSubsystemType.GK: gkViewModel.AddChild(nameViewModel); break; case JournalSubsystemType.SKD: skdViewModel.AddChild(nameViewModel); break; case JournalSubsystemType.Video: videoViewModel.AddChild(nameViewModel); break; } } foreach (JournalEventDescriptionType journalEventDescriptionType in Enum.GetValues(typeof(JournalEventDescriptionType))) { FieldInfo fieldInfo = journalEventDescriptionType.GetType().GetField(journalEventDescriptionType.ToString()); if (fieldInfo != null) { EventDescriptionAttribute[] eventDescriptionAttributes = (EventDescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(EventDescriptionAttribute), false); if (eventDescriptionAttributes.Length > 0) { EventDescriptionAttribute eventDescriptionAttribute = eventDescriptionAttributes[0]; var journalEventNameType = eventDescriptionAttribute.JournalEventNameType; var eventViewModel = AllNames.FirstOrDefault(x => x.JournalEventNameType == journalEventNameType); if (eventViewModel != null) { var descriptionViewModel = new NameViewModel(journalEventDescriptionType, eventDescriptionAttribute.Name); eventViewModel.AddChild(descriptionViewModel); AllNames.Add(descriptionViewModel); } } } } }