public static TimerValueListModel Instance()
        {
            if (IsCreated)
            {
                return _timerValueListModel;
            }
            else
            {
                _timerValueListModel = new TimerValueListModel();

                _timerListSettings = new TimerListSettings();

                _timerListSettings.Reload();

                if (_timerListSettings.TimerList == null)
                {
                    // リストが読めない場合は3分を1個だけ設定
                    TimerValueList.Add(TimeSpan.Parse("0, 3, 0"));
                }
                else
                {
                    foreach (string ts in _timerListSettings.TimerList)
                    {
                        TimerValueList.Add(TimeSpan.Parse(ts));
                    }
                }

                IsCreated = true;

                return _timerValueListModel;
            }
        }
        public MainWindowViewModel()
        {
            #region Timerモデル生成および聞き耳設定
            _timerModel = new TimerModel();
            var timerListener = new PropertyChangedEventListener(_timerModel);

            timerListener.RegisterHandler("NowTimerStatus", (sender, e) =>
            {
                if (_timerModel.NowTimerStatus == TimerModel.TimerStatus.CountDown)
                {
                    StartPauseButtonContent = "PAUSE";
                    TimerValueListIsEnable = false;
                }
                else
                {
                    StartPauseButtonContent = "START";
                    TimerValueListIsEnable = true;
                }
            });

            timerListener.RegisterHandler("TimerRemainValue", (sender, e) =>
            {
                RemainTime = _timerModel.TimerRemainValue.ToString(@"hh\:mm\:ss\:fff");
            });
            this.CompositeDisposable.Add(timerListener);
            #endregion

            #region Timer値リストモデル生成および聞き耳設定
            _timerValueListModel = TimerListFactory.Create();
            var timerValueListListener = new PropertyChangedEventListener(_timerValueListModel);

            timerValueListListener.RegisterHandler("TimerValueListModel", (sender, e) =>
            {
                TimerValueList = _timerValueListModel.getEditTimerValueList();

                // コンボボックス表示用文字列再構築
                TimerValueStrList.Clear();
                foreach(TimeSpan ts in TimerValueList)
                {
                    TimerValueStrList.Add(MyUtil.TimeSpanTo24hStr(ts));
                }
                RaisePropertyChanged("TimerValueStrList");
            });

            this.CompositeDisposable.Add(timerValueListListener);

            #endregion
        }
        public void Initialize()
        {
            _timerValueListModel = TimerListFactory.Create();

            EditTimerValueStrList = new ObservableSynchronizedCollection<string> { };

            _editTimerValueList = _timerValueListModel.getEditTimerValueList();
            foreach (TimeSpan value in _editTimerValueList)
            {
                EditTimerValueStrList.Add(MyUtil.TimeSpanTo24hStr(value));
            }
        }
        /* コマンド、プロパティの定義にはそれぞれ
         *
         *  lvcom   : ViewModelCommand
         *  lvcomn  : ViewModelCommand(CanExecute無)
         *  llcom   : ListenerCommand(パラメータ有のコマンド)
         *  llcomn  : ListenerCommand(パラメータ有のコマンド・CanExecute無)
         *  lprop   : 変更通知プロパティ(.NET4.5ではlpropn)
         *
         * を使用してください。
         *
         * Modelが十分にリッチであるならコマンドにこだわる必要はありません。
         * View側のコードビハインドを使用しないMVVMパターンの実装を行う場合でも、ViewModelにメソッドを定義し、
         * LivetCallMethodActionなどから直接メソッドを呼び出してください。
         *
         * ViewModelのコマンドを呼び出せるLivetのすべてのビヘイビア・トリガー・アクションは
         * 同様に直接ViewModelのメソッドを呼び出し可能です。
         */
        /* ViewModelからViewを操作したい場合は、View側のコードビハインド無で処理を行いたい場合は
         * Messengerプロパティからメッセージ(各種InteractionMessage)を発信する事を検討してください。
         */
        /* Modelからの変更通知などの各種イベントを受け取る場合は、PropertyChangedEventListenerや
         * CollectionChangedEventListenerを使うと便利です。各種ListenerはViewModelに定義されている
         * CompositeDisposableプロパティ(LivetCompositeDisposable型)に格納しておく事でイベント解放を容易に行えます。
         *
         * ReactiveExtensionsなどを併用する場合は、ReactiveExtensionsのCompositeDisposableを
         * ViewModelのCompositeDisposableプロパティに格納しておくのを推奨します。
         *
         * LivetのWindowテンプレートではViewのウィンドウが閉じる際にDataContextDisposeActionが動作するようになっており、
         * ViewModelのDisposeが呼ばれCompositeDisposableプロパティに格納されたすべてのIDisposable型のインスタンスが解放されます。
         *
         * ViewModelを使いまわしたい時などは、ViewからDataContextDisposeActionを取り除くか、発動のタイミングをずらす事で対応可能です。
         */
        /* UIDispatcherを操作する場合は、DispatcherHelperのメソッドを操作してください。
         * UIDispatcher自体はApp.xaml.csでインスタンスを確保してあります。
         *
         * LivetのViewModelではプロパティ変更通知(RaisePropertyChanged)やDispatcherCollectionを使ったコレクション変更通知は
         * 自動的にUIDispatcher上での通知に変換されます。変更通知に際してUIDispatcherを操作する必要はありません。
         */
        public void Initialize()
        {
            _timerValueListModel = TimerListFactory.Create();

            TimerValueList = _timerValueListModel.getEditTimerValueList();
        }