2017-08-18 76 views
0

WPFでAvalonDock環境を学習しようとしています。私はオブジェクトのリスト(基本的に名前と値が含まれています)を表示するツリービューを含むアンカー可能なペインを持っています。動的コンテンツでAvalonDockレイアウトを保存する

また、UserControlをホストするいくつかのドキュメントペインがあります。ツリービューから項目(基本的にはWrapPanelであるUserControl)にアイテムをドラッグしてドロップすると、2番目のユーザーコントロールタイプが追加されます(このユーザーコントロールには、 '名前'にバインドされたテキストブロックと ' ')を文書で主催されたコントロールに追加します。

今、ドラッグ&ドロップによって作成された動的コンテンツでこのレイアウトを保存したいと考えています。

これは可能ですか? XmlLayoutSerializerを使用すると、生成されたxamlにはドキュメントとアンカーが含まれていますが、これらのアイテムにはコンテンツがありません。

オブジェクトのコレクション(つまり、ObservableCollectionにバインドされている)を保存して、ビューを '復元'したいときにコレクションを初期化する必要がありますか?

目的は、エンドユーザーが(ツリービューから)必要なデータを表示し、レイアウトが適切に表示されるように変更できるビューを作成することです。任意のポインタのための

おかげ

ソリューションについて説明しCodeProjectの記事があります

答えて

0

https://github.com/tgjones/gemini/https://www.codeproject.com/articles/719143/avalondock-tutorial-part-load-save-layout

あなたはまた、はるかに柔軟なソリューションを持っているジェミニプロジェクト、を見てみましょうことは、重要なことは、Gemini/Frameworkディレクトリにあります。

純粋なMVVMソリューションで、メイン/シェルビューモデル内のすべてのドキュメントとレイアウト項目とそのデータバインドを保持します。レイアウトを保存している間、すべてのビューモデルに状態を保存するように要求し、DockingManager状態は最後に保持されます。レイアウトを読み込んでいる間、最初にすべての状態が読み込まれ、AvalonDocks XmlLayoutSerializerLayoutSerializationCallbackイベントでビューモデルが再作成されます。これはきれいできれいなアプローチですが、(AFAIK)コントロールが純粋にXAMLで作成され、何らかの種類のメッセージング(たとえばPrism EventAggregator)を使用してアプリケーションの残りの部分に接続されている状況を処理できません。

この問題を解決するには、DockingManagerをホストするビューのヘルプが必要です。LayoutAnchorablesLayoutDocumentsのリストを求め、同様のメカニズムを使用して状態を保存/ロードします。元のソリューションと同じくらいエレガントで純粋なMVVMではありませんでしたが、より柔軟なMVVMが見つかりました。いくつかのインタフェースと拡張メソッドですべてをラップすることができます。

私は私のプロジェクトのためにそれをしました、そして、それは素晴らしい作品です。ある日GitHubに載せるかもしれない。

関連する問題