// (0.0.6)バグを修正.
		// parameterで数値が渡されれば、1サイクルに対して解析を行う。
		// さもなければ、全サイクルに対して解析を行う。
		async void FitSpectrum_Executed(object parameter)
		{
			// parameterがnullであれば,全てのprofileに対してフィッティングを行う.
			// parameterにprofileが与えられていれば,それに対してフィッティングを行う.

			// ★BaseROIを決める段階と,実際のフィッティングを行う段階を分離した方がいいのでは?

			this.FitCommandExecuting = true;

			try
			{

				var fitting_task = parameter is FittingProfile
					? DepthProfileFittingData.FitSingleProfile((FittingProfile)parameter) : DepthProfileFittingData.FitAsync();

				try
				{
					await fitting_task;
				}
				catch (Exception) { }

				if (fitting_task.Exception is AggregateException)
				{
					var message = string.Join("\n", fitting_task.Exception.InnerExceptions.Select(ex => ex.Message));
					Messenger.Default.Send(this, new SimpleMessage(this) { Message = message });
					return;
				}
			}
			finally
			{
				this.FitCommandExecuting = false;
			}
		}
		void RemoveProfile_Executed(object parameter)
		{
			if (CurrentFittingProfile != null)
			{
				// これで大丈夫かな?
				DepthProfileFittingData.RemoveFittingProfile(CurrentFittingProfile);
			}
		}
		void SaveCondition_Executed(object parameter)
		{
			var message = new SelectSaveFileMessage(this) { Message = "プロファイルの出力先を選んで下さい。" };
			message.Ext = new string[] { ".fcd" };
			Messenger.Default.Send(this, message);
			if (!string.IsNullOrEmpty(message.SelectedFile))
			{
				DepthProfileFittingData.SaveFittingCondition(message.SelectedFile);
			}

		}
		void LoadCondition_Executed(object parameter)
		{
			var message = new SelectOpenFileMessage(this) { Message = "ロードするプロファイルを選択して下さい。" };
			message.Filter = new string[] { "*.fcd", "*" };
			Messenger.Default.Send(this, message);
			if (!string.IsNullOrEmpty(message.SelectedFile))
			{
				// ロードする.
				DepthProfileFittingData.LoadFittingCondition(message.SelectedFile);
			}
		}
		async void AddReferenceSpectrum_Executed(object parameter)
		{
			var message = new SelectOpenFileMessage(this) { Message = "参照スペクトルを選んで下さい." };
			// 拡張子ではなくファイル名が指定されている場合ってどうするの?
			message.Filter = new string[] { "id" };
			Messenger.Default.Send(this, message);
			if (!string.IsNullOrEmpty(message.SelectedFile))
			{
				await DepthProfileFittingData.AddReferenceSpectrumAsync(message.SelectedFile, CurrentFittingProfile);
			}

		}
		void SelectChartDestination_Executed(object parameter)
		{
			// ディレクトリを選ぶのか?
			// とりあえずファイル選択にしておく.
			// →ファイル選択と見せかけて、ディレクトリ選択にする。

			var message = new SelectSaveFileMessage(this) { Message = "pngファイルの出力先を選んで下さい." };
			message.Ext = new string[] { ".png" };
			Messenger.Default.Send(this, message);
			DepthProfileFittingData.SetChartDestination(message.SelectedFile);

		}
		void AddFittingProfile_Executed(object parameter)
		{
			DepthProfileFittingData.AddFittingProfile(CurrentROI);
		}