/// <summary> /// 作業エリアが閉じられる時 /// </summary> /// <param name="vm">閉じようとしている作業エリア</param> /// <returns></returns> public bool DocumentClosing(WorkAreaViewModel vm) { var canceled = false; // 変更があったか? if (vm.HasChanged) { var result = LocalizedMessageBox.Show("Lang:PlanClosingConfirmMessage", "Lang:Confirmation", MessageBoxButton.YesNoCancel, MessageBoxImage.Question, MessageBoxResult.Cancel, vm.Title); switch (result) { // 保存する場合 case MessageBoxResult.Yes: vm.Save(); canceled = vm.HasChanged; // 保存したはずなのに変更点がある(保存キャンセルされた等)場合、閉じないようにする break; // 保存せずに閉じる場合 case MessageBoxResult.No: break; // キャンセルする場合 case MessageBoxResult.Cancel: canceled = true; break; } } // 閉じる場合、リソースを開放 if (!canceled) { vm.Dispose(); Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() => { Documents.Remove(vm); // 最後のタブを閉じた時にAvalonDockのActiveContentが更新されないためここでnullにする // → nullにしないと閉じたはずのタブを保存できてしまう if (Documents.Count == 0) { ActiveContent = null; } }), DispatcherPriority.Background); // ガーベジコレクション用タイマー開始 if (!_GCTimer.IsEnabled) { _GCTimer.Start(); } // 時間計測用ストップウォッチを初期化 _GCStopWatch.Reset(); } return(canceled); }
/// <summary> /// インポート実行 /// </summary> /// <param name="import"></param> public void Import(IImport import) { // インポート対象数を取得 var importCnt = import.Select(); for (var cnt = 0; cnt < importCnt; cnt++) { var vm = new WorkAreaViewModel(_WorkAreaManager.ActiveLayoutID); if (vm.Import(import)) { _WorkAreaManager.Documents.Add(vm); } else { vm.Dispose(); } } }