2

厳密な MVVM パターンで wpf デスクトップ アプリを開発しています。
現在、私のアプリは次のことを行っています:

  • HierarchicalDataTemplate を使用して Treeview を表示します。
  • ユーザーはノードを展開または折りたたむことができます。
  • ユーザーは、新しいノードを追加できます (ドラッグ アンド ドロップ + ダブルクリック)。
  • 新しいノードが追加されるたびに、モデルが更新され、モデルに基づいてツリービューが再作成されます。
  • Treeview が再作成されるため、ノードを追加した後、すべてのノードが展開されて表示されます。

以前の展開された状態でノードを表示したい。MVVM を使用してこれを行う方法はありますか? 私がこれまで考えてきたことは、

  • モデルには、UI の描画方法に関連するデータを含めるべきではありません ??
  • VM はモデルからデータを取得し、それを UI に配置する必要があります (そして UI からモデルに日付を渡します) ??

ご意見ありがとうございます。私はレールから遠く離れているかもしれません。ただ、皆さんのお知恵をお借りしたいです。

ありがとう
パイジャ

4

3 に答える 3

2

まだお読みでない場合は、Josh Smith による次の素晴らしい記事をお読みください: ViewModel パターンを使用して WPF TreeView を単純化する

基本的に彼が提案しているのはIsExpanded、VM で呼び出されるプロパティを含め、TreeViewそれを正しくバインドして、展開/折りたたみ状態がプログラマによって完全に制御されるようにすることです。

于 2010-02-04T06:01:41.663 に答える
1

私が考える1つの解決策は、ツリーの再作成を停止し、モデルを更新して、ノードアイテムをドロップしている現在のノードにのみ追加することです。モデルのコレクションを更新するだけで、ツリーを更新しないでください。これがあなたの建築家に合わない場合はお知らせください。

ありがとう、Jagdev Josan

于 2010-02-04T04:32:31.067 に答える
0

ビューモデルには、ビュー関連の情報を含めることができます。これがその目的です。それは純粋なビジネスと純粋なビューの間の架け橋です。私のビュー モデルは通常、オブジェクトのいくつかのビジネス プロパティを公開し、いくつかの関連するビュー プロパティを追加します。ビジネス プロパティだけが必要な場合は、ビジネス レイヤーに直接バインドします。ビューモデルが必要なのは、ここでの状況のようなことをする必要がある場合だけです。

ツリーを完全に再作成したい場合 (クレイジーに聞こえます)、展開されたノードの状態をビュー モデルに格納し、ItemsContainerStyle を使用してそれらをツリー ビュー アイテムにバインドできます。そうすれば、ツリー ビューを再作成しても、以前に展開したノードは引き続き展開されます。

したがって、ラップされたビジネス オブジェクトには、ツリー ビューの状態を復元するために使用できる追加のプロパティ IsExpanded が含まれます。

Ps は、ツリー ビューを再作成するために少しやりすぎたことを言及しましたか?

于 2010-02-04T06:02:21.883 に答える