/// <summary> /// Initializes a new instance of the <see cref="MainViewModel"/> class. /// </summary> /// <param name="serviceLocator"> /// A <see cref="IServiceLocator"/> instance. /// </param> /// <param name="mapper"> /// A <see cref="ICommandTreeItemViewMapper"/> mapper. /// </param> /// <param name="taskRepository"> /// A <see cref="ITaskRepository"/> repository. /// </param> public MainViewModel( IServiceLocator serviceLocator, ICommandTreeItemViewMapper mapper, ITaskRepository taskRepository) { this.TaskContainer = new TaskContainerViewModel(serviceLocator, mapper, taskRepository); this.Logger = serviceLocator.Resolve <ILogger>(); this.ClearCommand = new DelegateCommand(() => { this.Logger.Clear(); this._filteredLogMessages.Clear(); }); this.SelectedLogLevel = this.LogLevels.First(); this.Logger.LogMessages.CollectionChanged += (s, e) => { if (this.SelectedLogLevel == "All") { return; // If ALL items then no need to maintain our filtered messages. } if (e.NewItems == null) { this._filteredLogMessages.Clear(); } else { e.NewItems.OfType <LogMessage>() .Where(l => l.Level.ToString() == this._selectedLogLevel) .ToList() .ForEach(l => this._filteredLogMessages.Add(l)); } }; this.Registrations = serviceLocator.GetRegisteredTypes().OrderBy(t => t.InterfaceType.FullName); }
/// <summary> /// Initializes a new instance of the <see cref="TaskContainerViewModel"/> class. /// </summary> /// <param name="serviceLocator"> /// A <see cref="IServiceLocator"/> instance used for resolving dependencies. /// </param> /// <param name="mapper"> /// A <see cref="ICommandTreeItemViewMapper"/> mapper for mapping commands to views. /// </param> /// <param name="taskRepository"> /// A <see cref="ITaskRepository"/> repository. /// </param> public TaskContainerViewModel( IServiceLocator serviceLocator, ICommandTreeItemViewMapper mapper, ITaskRepository taskRepository) { this.Tasks = new SafeObservableCollection <TaskViewModel>(); var task = this.LoadTasks(serviceLocator, mapper, taskRepository); }
/// <summary> /// Initializes a new instance of the <see cref="TaskGroupViewModel"/> class. /// </summary> /// <param name="mapper"> /// A <see cref="ICommandTreeItemViewMapper"/> mapper. /// </param> /// <param name="name"> /// Group name. /// </param> /// <param name="tag"> /// A unique value for the view model. /// </param> /// <param name="tasks"> /// A list of tasks. /// </param> public TaskGroupViewModel( ICommandTreeItemViewMapper mapper, string name, string tag, IEnumerable <TaskInfo> tasks) : base(null, name, tag) { this.Mapper = mapper; this.Tasks = tasks; this.Name = name; }
/// <summary> /// Load tasks. /// </summary> /// <param name="serviceLocator"> /// A <see cref="IServiceLocator"/> instance used for resolving dependencies. /// </param> /// <param name="mapper"> /// A <see cref="ICommandTreeItemViewMapper"/> mapper for mapping commands to views. /// </param> /// <param name="taskRepository"> /// A <see cref="ITaskRepository"/> repository. /// </param> /// <returns> /// A <see cref="System.Threading.Tasks.Task"/> instance. /// </returns> private async Task LoadTasks( IServiceLocator serviceLocator, ICommandTreeItemViewMapper mapper, ITaskRepository taskRepository) { foreach (var task in await taskRepository.GetTasksAsync(serviceLocator, serviceLocator.Resolve <ILogger>())) { if (task.Type == TaskType.TaskGroup && task.Tasks.Any()) { this.Tasks.Add(new TaskGroupViewModel(mapper, task.Name, task.Tag, task.Tasks)); mapper.Add(task.Tag, task.View); } } }
/// <summary> /// Initializes a new instance of the <see cref="MainWindow"/> class. /// </summary> /// <param name="mapper"> /// A <see cref="ICommandTreeItemViewMapper"/> mapper. /// </param> public MainWindow(ICommandTreeItemViewMapper mapper) { this.InitializeComponent(); this.TaskNavigationViewer.TaskSelectionChangedEvent += (s, e) => { var taskViewModel = e.SelectedItem as TaskViewModel; if (taskViewModel == null) { return; } var ctrl = mapper.GetControl(taskViewModel.Tag); if (ctrl != null) { ctrl.DataContext = taskViewModel.DataContext; this.DetailViewContainer.ShowView(ctrl); } }; }