2011-01-10 8 views
1

この質問のバージョンが尋ねられましたが、そのように重複しているとは思われません。私はC#/ Prism4でLOBアプリケーションを構築していますが、私は1日目からアーキテクチャを正しく取得しようとしています。アプリケーションには、最終的にかなりのマスター/詳細画面と編集可能な埋め込みグリッドの編集画面があります。たとえば、ポップアップ画面で追加または編集する機能を持つユーザーのリストを表示します。ポップアップダイアログとPrism4を使用しているマスターの詳細

現時点では、データバインドによって可視性が制御された同じビューモデルにバインドされた非表示のパネルデータとしてダイアログを表示するのが簡単な解決策であると考えています。上記の例を使用してユーザーを編集するには、編集するデータのコピーを作成し、IsInEditModeフラグをtrueに設定してダイアログを表示します。通常のコマンドでは、 'save'/'cancel'ボタンを捕捉してモデルを更新することができます。

これは実装が簡単ではありませんが、少し間違っていると感じます。心配の分離があります、それはviewmodelが多重化されているように感じます。

私はPrism InteractionRequestガイダンスに出くわしましたが、それは単純なポップアップ(「キャンセルしてもよろしいですか?

私は、数十画面にまたがるスケールが必要なソリューションが必要です。維持するのは簡単で簡単です。

ありがとうございます。

答えて

2

一般的なアプローチは、このようなインターフェイスに何かを持つ、いわゆるダイアログサービス持っていることです。

public interface IDialogService 
{   
    bool? ShowDialog<TViewModel>(TViewModel viewModel); 
} 

をそして、あなたはダイアログを表示する必要があるたびに、ダイアログのビューモデルを渡すShowDialogメソッドを呼び出します。そしてサービスは残りの部分を取ります。隠しパネル、実際のダイアログウィンドウ、またはポップアップを表示することができます。これは実装に依存し、呼び出し側はそれについて何も知りません。

+0

ありがとうございました。 Prism4ドコは、インタラクションサービスまたはインタラクションリクエストの使用、その優先的な実装をカバーしています。そう言われているように、それはyes/noダイアログをポップアップさせるような単純なやり取りに基づいているようです。私は、実際に多くのフィールドを交換する実際のダイアログを実際にどのように構築するのがいかに大変かと思います。それ自体のビューとビューモデルに値するか、またはそれをオーナーのV/VMに靴ひもで結ぶことができますか?それについてサンクして、私は別のVとVMを持つことに近づいています - それはより拡張性があり、膨大な、維持不能なファイルのリスクを減らします。 – dave

+0

それは確かに独自のビューとビューモデルに値する。ダイアログは別の画面で、独自のビューモデルが必要です。これはまた、懸念の分離を促進する。 –

0

私はあなたのダイアログボックスは常に自分自身のVMを持っている必要がありますが、呼び出し側は自分自身のDataContextを渡すことができますが、これはmaser/child ViewModelの同期を気にする必要はなく、懸念の分離を行う。たとえば、ユーザープロファイルフォーム(maser)があり、モーダルダイアログアドレスがあります。ダイアログが閉じられた後にプロファイルのVMを渡すと、アドレス関連のプロパティとビューフィールドが自動的に更新されます(バインディングを楽しむ)。

1

私の意見では、マスター詳細は独自の見解が必要です(詳細は複数のモデルオブジェクトであればVM部分が必要かもしれません)。

つまり、私は間違いなくPrism 2.2のRIの一部であったPopupRegionBehaviorを使用します。これは、このシナリオでは特に便利です。マスター詳細ビューを特定の地域に登録することができます(詳細をシェルに引き込むことを決定した場合でも、これは引き続き有効です)。

これについてはmany threads in the Prism forum at codeplexがあります。

関連する問題