public TimelineWorkingTimeCardViewModel(WorkingTimeForTimelineDto workingTimeRange)
        {
            DomainModel = workingTimeRange;

            // 1sスパンで更新する
            var timer = new ReactiveTimer(TimeSpan.FromSeconds(1), new SynchronizationContextScheduler(SynchronizationContext.Current));

            timer.Subscribe(_ => UpdateDurationTime());
            timer.AddTo(CompositeDisposable);
            timer.Start();

            if (DomainModel == null)
            {
                TaskTitle            = "お休み中";
                TaskCategory         = TaskCategory.Develop;
                WorkProcessName      = "‐‐‐";
                ShowStopButton.Value = false;
                return;
            }

            TaskTitle       = workingTimeRange.TaskTitle;
            TaskCategory    = workingTimeRange.TaskCategory;
            WorkProcessName = workingTimeRange.WorkProcessName;

            StartHHmm = workingTimeRange.TimePeriod.StartDateTime.ToString("HHmm");
            EndHHmm   = workingTimeRange.TimePeriod.EndDateTime?.ToString("HHmm") ?? "";

            CanvasTop          = CalcTop();
            ActualHeight.Value = CalcActualHeight();
        }
        public WorkUnitRecorderViewModel()
        {
            PlanedTaskCards = _Model.PlanedTaskModels
                              .ToReadOnlyReactiveCollection(t => new WorkTaskWithTimesCardViewModel(t))
                              .AddTo(CompositeDisposable);

            WorkingTimes = _Model.WorkingTimes
                           .ToReadOnlyReactiveCollection(w => new TimelineWorkingTimeCardViewModel(w))
                           .AddTo(CompositeDisposable);

            DoingTask = _Model.DoingTask
                        .Select(t => new TimelineWorkingTimeCardViewModel(t))
                        .ToReactiveProperty()
                        .AddTo(CompositeDisposable);

            ContainsCompleted = _Model.ContainsCompleted
                                .ToReactivePropertyAsSynchronized(d => d.Value)
                                .AddTo(CompositeDisposable);

            // 変更前のタイマー解除
            DoingTask.Pairwise().Subscribe(pair => pair.OldItem?.Dispose());

            TargetDateTime = _Model.TargetDate
                             .ToReactivePropertyAsSynchronized(d => d.Value)
                             .AddTo(CompositeDisposable);

            AddingTaskButtons = new ReactiveCollection <AddingTaskButtonViewModel>();
            InitializeAddingTaskButtons();

            CompositeDisposable.Add(_Model);

            Initialize();

            // 1sスパンで更新する
            var timer = new ReactiveTimer(TimeSpan.FromSeconds(1), new SynchronizationContextScheduler(SynchronizationContext.Current));

            timer.Subscribe(_ => {
                _Model.BackupIfNeeded();
                _Model.UpdateDoingTask();
                foreach (var obj in PlanedTaskCards)
                {
                    obj.UpdateStatus();
                }
            }
                            );
            timer.AddTo(CompositeDisposable);
            timer.Start();
        }