public FileDocumentTestWindowViewModel()
        {
            this.document    = new TestDocument();
            this.disposables = new CompositeDisposable();

            this.Text = new ReactiveProperty <string>().AddTo(this.disposables);
            this.Text.Subscribe(x =>
            {
                this.document.TestData = x;
                this.document.Dirty    = true;
            });
            this.NewDocumentCommand = new ReactiveCommand().AddTo(this.disposables)
                                      .WithSubscribe(() =>
            {
                if (this.document.CreateNewDocument())
                {
                    this.Text.Value     = this.document.TestData;
                    this.document.Dirty = false;
                }
            });
            this.OpenFileCommand = new ReactiveCommand().AddTo(this.disposables)
                                   .WithSubscribe(() => {
                if (this.document.OpenDocument())
                {
                    this.Text.Value     = this.document.TestData;
                    this.document.Dirty = false;
                }
            });
            this.SaveAsCommand = new ReactiveCommand().AddTo(this.disposables)
                                 .WithSubscribe(() => {
                this.document.SaveAsDocument();
            });
            this.SaveFileCommand = new ReactiveCommand().AddTo(this.disposables)
                                   .WithSubscribe(() => {
                this.document.SaveDocument();
            });

            this.document.RequestOpenFileDialog            += this.Document_RequestOpenFileDialog;
            this.document.RequestSaveFileDialog            += this.Document_RequestSaveFileDialog;
            this.document.RequestConfirmCloseMessageDialog += this.Document_RequestConfirmCloseMessageDialog;

            this.document.Dirty = false;
        }
        private bool disposedValue = false; // 重複する呼び出しを検出するには

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    // TODO: マネージ状態を破棄します (マネージ オブジェクト)。
                    this.disposables.Dispose();
                    this.disposables = null;

                    this.document.Dispose();
                    this.document = null;
                }

                // TODO: アンマネージ リソース (アンマネージ オブジェクト) を解放し、下のファイナライザーをオーバーライドします。
                // TODO: 大きなフィールドを null に設定します。

                disposedValue = true;
            }
        }