2

現在のアプリケーションで MVVM 関連の問題を次々と解決していくにつれて、さらに多くの問題が発生し続けています。:)

私が置き換えようとしている現在の実装には、(構成ファイルを参照して) 多かれ少なかれ動的に子が生成される StackPanel が含まれます。各子は UserControl のインスタンスです。以前は、StackPanel に名前を割り当ててから、Window_Loaded イベント ハンドラーで、必要な子の数を決定し、それぞれに対して 1 つの UserControl をインスタンス化し、UserControl に ID を割り当てて、それがわかるようにするだけでした。特定の UserControl インスタンスでクリックされたボタンの適切なソース。各 UserControl には 3 つのボタンがあります。

したがって、StackPanel をコレクションにバインドする必要があることはわかっています。ListBox や ListView (または ItemsControl 自体) など、ItemsControl から派生したものを使用する必要があるため、これはもちろん不可能です。MVVM 化の最初の反復を簡単にするために、ListBox を使用します。

問題は、コード ビハインドの ObservableCollection を ObservableCollection にする必要があるかどうかです。これは、GUI をどのようにスキンしても、この ListBox には、MyUserControl の XAML ファイルでどのように見える子も常に存在することを意味すると思います。これもカスタマイズ可能にしたいのですが、これは、MVVM パターンを UserControl にも適用する必要があることを意味すると思います。

4

2 に答える 2

5

各リスト項目に異なるテンプレートを持たせ、MVVM スタイルに固執したい場合は、UserControls の観点から考えないほうがよいでしょう。

メイン ビューを使用して、ListBox をビュー モデル インスタンスの監視可能なコレクションにバインドできます。ViewModel クラスを適切な UserControl にマップするようにデータ テンプレートを設定する場合、UserControl を明示的に読み込む必要はありません。ItemsControl を ViewModel のコレクションにバインドするだけで、データ テンプレートがこれを構築してマップします。その VM の正しい UserControl。

于 2010-01-04T19:00:34.463 に答える
1

あなたのコレクションは、そうである必要がなければ、ObservableCollectionそうである必要はありません。の「Observable」部分はObservableCollection、コレクションが変更されたことを他のユーザーに通知するイベントを提供するだけの問題であり、視覚的な表現とはまったく関係ありません。

ObservableCollectionList<T>は、MVVM が提供するすべてのイベント通知を提供するため、MVVM に非常に適してObservableCollection<T>います。

于 2010-01-04T19:00:48.147 に答える