public void WireupTaskFileServices(PrimaryTaskFileService ptfs, ArchiveTaskFileService atfs)
		{
			_archiveFileService = atfs;

			_taskFileService = ptfs;

			TaskList = _taskFileService.TaskList;

			_loadingStateObserver = Observable.FromEvent<LoadingStateChangedEventArgs>(
				_taskFileService, "LoadingStateChanged");

			_loadingStateObserver.Subscribe(e => LoadingState = e.EventArgs.LoadingState);

			_taskListChangedObserver = Observable.FromEvent<TaskListChangedEventArgs>(
				_taskFileService, "TaskListChanged");

			_taskListChangedObserver.Subscribe(e =>
				{
					RaisePropertyChanged(AllTasksPropertyName);
					RaisePropertyChanged(CompletedTasksPropertyName);
					RaisePropertyChanged(ContextsPropertyName);
					RaisePropertyChanged(ProjectsPropertyName);
				});

			Observable.FromEvent<SynchronizationErrorEventArgs>(_taskFileService, "SynchronizationError")
				.Subscribe(e => Messenger.Default.Send(new SynchronizationErrorMessage(e.EventArgs.Exception)));

            _taskFileService.LocalHasChangesChanged += TaskFileServiceOnLocalHasChangesChanged;
		}
		/// <summary>
		/// Initializes a new instance of the MainViewModel class.
		/// </summary>
		public MainViewModel(PrimaryTaskFileService taskFileService, ArchiveTaskFileService archiveFileService, ApplicationSettings applicationSettings)
		{
		    _applicationSettings = applicationSettings;

		    if (IsInDesignMode)
		    {
		        // Code runs in Blend --> create design time data.
		        TaskList = new TaskList
		        {
		            new Task("A", null, null,
		                "This is a designer task that might be really long the quick brown fox jumped over the lazy dogs"),
		            new Task("", null, null, "This is a designer task2"),
		            new Task("", null, null,
		                "This is a designer task3 Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.")
		        };

		        var b = new Task("B", null, null, "This is a designer task4", DateTime.Now.AddDays(-1), null, false, null);
		        b.ToggleCompleted();
		        TaskList.Add(b);
		        TaskList.Add(new Task("C", null, null, "This is a designer task5"));

		        TaskList.Add(new Task("This task has two contexts @home @work"));
		        TaskList.Add(new Task("This task has two projects +planvacation +fixstove"));
		        TaskList.Add(new Task("This task has one of each @home +fixstove"));
		        TaskList.Add(new Task("")); // Blank task line

		        SelectedTask = TaskList[3];
		        ViewTask();
		    }
			else
			{
				// Code runs "for real"
				WireupTaskFileServices(taskFileService, archiveFileService);

				Messenger.Default.Register<DrillDownMessage>(this, Filter);
			    Messenger.Default.Register<ApplicationStartedMessage>(this, message =>
			        {
                        LocalHasChanges = _taskFileService.LocalHasChanges;

			            if(StartupSyncCommand.CanExecute(null))
			            {
			                StartupSyncCommand.Execute(null);
			            }
			        });

				WireUpCommands();
			}
		}