コード例 #1
0
ファイル: NamesViewModel.cs プロジェクト: xbadcode/Rubezh
		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);
						}
					}
				}
			}
		}