public WorkTaskViewModel(WorkTask task, WorkProcess[] processes, Client[] clients, Product[] products)
        {
            DomainModel = task;
            _Processes  = processes;
            _Clients    = clients;
            _Products   = products;

            Title = DomainModel.ToReactivePropertyWithIgnoreInitialValidationError(x => x.Title)
                    .SetValidateNotifyError(x => string.IsNullOrWhiteSpace(x) ? "タイトルは入力必須です" : null)
                    .AddTo(CompositeDisposable);

            TaskCategory = DomainModel.ToReactivePropertyAsSynchronized(x => x.TaskCategory)
                           .AddTo(CompositeDisposable);

            Product = DomainModel.ToReactivePropertyAsSynchronized(
                x => x.ProductId,
                m => _Products.FirstOrDefault(p => p.Id == m),
                vm => vm?.Id ?? Identity <Product> .Empty)
                      .AddTo(CompositeDisposable);

            WorkProcess = DomainModel.ToReactivePropertyAsSynchronized(
                x => x.ProcessId,
                m => _Processes.FirstOrDefault(p => p.Id == m),
                vm => vm?.Id ?? Identity <WorkProcess> .Empty,
                ReactivePropertyMode.IgnoreInitialValidationError)
                          .SetValidateNotifyError(x => (x == null || x.Id == Identity <WorkProcess> .Empty) ? "工程は選択必須です" : null)
                          .AddTo(CompositeDisposable);

            Client = DomainModel.ToReactivePropertyAsSynchronized(
                x => x.ClientId,
                m => _Clients.FirstOrDefault(p => p.Id == m),
                vm => vm?.Id ?? Identity <Client> .Empty)
                     .AddTo(CompositeDisposable);

            if (task.Id.IsTemporary)
            {
                DomainModel.TaskCategory = Domain.Domain.Tasks.Definitions.TaskCategory.Develop;
            }

            //Remarks = DomainModel.ToReactivePropertyWithIgnoreInitialValidationError(x => x.Remarks)
            //                      .SetValidateNotifyError(x => string.IsNullOrWhiteSpace(x) ? "備考は入力必須です" : null)
            //                      .AddTo(CompositeDisposable);
        }