2009-06-18 16 views
1

Winforms TreeViewコントロールに階層的なデータがあり、プレゼンターが変更を同期できるようにプロパティとして公開する必要があります。明らかにするために、私はパッシブビューパターンを使用しています。ほとんどのWinFormコントロールでは、これは簡単ではありません。コントロール自体は、プレゼンターに簡単に渡すことができるシステムタイプとしてデータを公開します。 TreeViewsは、その複雑さのために、システムタイプに簡単にはマッピングされません。私はフレームワークのコレクション型を探しましたが、ツリーは見落とされているようです。 (Microsoftは、いくつかのより高いレベルのクラスのためのフードunderneithツリー構造を使用するように見えるが、汎用の家族ツリークラスを作成しないことを選んだ。)TreeViewコントロールの階層データをMVPプレゼンターにどのように公開する必要がありますか?

いずれにせよ、私は公開しようとしているデータは、より多くのことはありません2つのノードが深いので、私はTreeViewを使用し続けるつもりはないと確信しています。プレゼンターをTreeNodeCollectionに結びつけないようにする理由は、すべてです。

私はすでにいくつかのアイデアを作ってみたんだけど、SOコミュニティにそれらをオフにバウンスしたい:

  • 言う...コレクションのコレクションとしてリストの辞書をツリーを公開します。
  • カスタムツリー構造を作成し、プロセスのビューに依存関係を導入します。

その子ノードは、理論的に50ほどの高いカウントを打つことができますが、実際に

3以上または4任意の提案を行っていないでしょうしながら、トップレベルのノードは、5-10のエントリを平均化しますか?私はそれらのいずれかの経験を持っていない

答えて

0

はここで木のコレクションの実装を含む3つの無料の.NETライブラリへのリンクです。

+0

ありがとうございました。第三者ツリーの実装も一つの選択肢です。それでも、ビューに余分な依存関係が導入されます。 –

0

これは性能の依存アプリであれば、私はあなたが反対方向に考える必要があると思うのツリーベースのコレクション

+0

ツリービューに表示されるデータは頻繁に更新されないため、パフォーマンスに問題はありません。私は、ビューとプレゼンターの明確な分離にもっと関心を持っています。 –

3

の使用agianstお勧めする:ビューに階層構造を公開プレゼンタべきか。抽象的に見て、具体的な実装(あなたの場合はTreeView)にあまり集中しないでください。通常、MVPパターンを使用して要素を実装するときは、ビューインターフェイスを定義すると同時にプレゼンタロジックの作成を開始します。理想的には、TDDとビューの模擬実装を使用してこれを行います。その後、具体的なビュー(Windowsフォームまたはコントロール)を実装します。

したがって、モデルを作成してビューに渡す必要があります。私は、カスタム階層構造(Composite pattern参照)を実装することをお勧めします。

ビューの実装ではTreeViewNodeのTagプロパティを使用して、TreeViewのノードとモデル内の要素を対応付けることができます。

+0

TDDとモックを使用して実装を駆動しています。私は私のビューインターフェイスを実装する空白のフォームを持っているので、私はそれを実装するフォームに追加するインターフェイスに追加するたびに。この場合、私はすでにツリービューを使用するアイデアを持っていましたが、ビューを混乱させることなく、または不要な依存関係を持つプレゼンターを使用することなくそれを使用する方法を理解できませんでした。より複雑なビューの実装を犠牲にしても、単純化されたビューインターフェイスに傾いています。私はいつでも後でリファクタリングすることができます。 –

関連する問題