0

では、モデルが相互に関連している複雑な集約された ViewModelをどのように表示するのでしょうか?

wpfの弟子はそれについて話したことはありません.なぜそれが不可能なのかを推測してください...

それは本当だと思いますか?

私を理解していませんか?

見てください: CustomerViewModelには多くのOrderViewModelとそれらの多くのProductViewModelがあります。

3 つの ViewModelすべての新しいデータを入力するための3つのワークスペースがあり、さらに、タイプ => customerVMおよび productVM のコレクションを複数選択するための3 つのリストボックス/コンボボ/データグリッドがあります。s, orderVM

新しい顧客/注文/製品が追加されるたびにワークスペースをオフ/オンにする必要がないユーザーにとって、UI が理にかなっているということは、ユーザー エクスペリエンスが悪いということです。この典型的な LOB アプリケーション要件をどのように処理しますか?

編集:

MVVM に WorkSpace タイプのコレクションがあります。すべての ViewModel は WorkSpace クラスから派生するため、ワークスペースにすることができます。Workspaces コレクションは、josh smith の例で ItemsSource にバインドされています。

ステートメント: 成熟した優れた Windows フォーム ユーザー インターフェイスを使用したいのですが、クローズ可能なビューモデルは ありません...データ型に応じて、itemsControl および datatemplated。

ViewModel インスタンスを保持するワークスペースがない場合、MVVM の ViewModel はモデルをコンストラクター パラメーターとして受け取るため、それらをデータ テンプレート化できませんでした。CustomerViewModel の DataType を使用して UserControl を DataTemplating すると、XAML で例外がスローされます。

次に、必要な UI を見てください。ワークスペースはありませんが、3 つの ViewModels = 3 つの UserControls datatemplated は、3 倍のビッグバンを意味します...

なぜ私がMVVMが好きではないのですか?よく考えられていないので、解決策を探しています...

もちろん、ViewModel 別名 DataFormular を ObservableCollection に配置することもできますが、ItemsControl にバインドしたくありません。これら 3 つの UserControl がレイアウト内の特定の位置にあることを望みます。ItemsControl を使用すると、既存のスペースに収まらない場合に新しい Dataformular が追加されてラップされる愚かなキューがあります。それはすべてゴミのレイアウト設計/悪いUIです.

あなたは今私を取得しますか?

4

1 に答える 1

2

Window に複数のコントロールを簡単に配置でき、それぞれが異なる ViewModel にバインドされます。VM 間を調整するための一般的なアプローチは、メッセージ パッシングを使用してさまざまなコンポーネントを疎結合することです。たとえば、Customer ViewModel が Order を選択したというメッセージを送信すると、OrderViewModel (メイン ウィンドウの一部にコントロールとして視覚化されている可能性があります) がメッセージを見て、表示される Order を変更します。

各 VM に挿入するインターフェイスを公開する共有サービス クラスを使用して、同様のことを実現できます。次に、この共有インターフェイスのプロパティをバインドして、メッセージとほぼ同じ方法で VM が通信できるようにします。これに似たものを使用して、「SelectedObject」の概念を表現しました。この概念では、さまざまな種類のオブジェクトを選択でき、アプリ内のさまざまな VM がさまざまな方法でそれを視覚化できます。たとえば、あなたの例を使用して、製品が SelectedObject になった場合、標準の ProductDataTemplate を使用して製品をレンダリングする「詳細」パネルがあり、別のパネル (注文を表示する) が製品リストの SelectedItem を変更する可能性があります。複数の「ワークスペース」を簡単に作成できます

于 2010-05-07T13:44:01.503 に答える