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(); }