6

次の 2 つの 1 時間のビデオでは、MVVM パターンを使用して、Silverlight と WPF の両方で簡単なクイズ アプリケーションを作成する方法を順を追って説明しています。

Silverlight での Model-View-ViewModel の実装

WPF で Model-View-ViewModel を実装する

これらについて私を驚かせたのは、たとえば、DataBinding の使用方法など、それらが構造的にどれほど異なるかということです。

Silverlight アプローチでは、 Viewの DataContext をViewModelのObservableCollectionに設定します。

<views:QuestionView x:Name="QuestionDataView" />

QuestionViewModel qdata = new QuestionViewModel();
qdata.FetchQuestions();
QuestionDataView.DataContext = qdata.Questions;

WPF アプローチでは、 Windowの DataContext をViewModel自体設定します。

<view:QuizView Margin="4" />

base.DataContext = new QuizViewModel(Quiz.Create());

私が見ているすべての MVVM の例は、わずかに新しいバリエーションで DataContext バインディングを行っているよう見えます

DataContext を何かにバインドすることを決定したとき、何が頭に浮かびますか? Window / View / ListBox / etc.の DataContextをObservableCollection / ModelView / etc.にバインドするのはなぜですか? ここでの利点、欠点、戦略は何ですか?

任意の入力をいただければ幸いです。

4

3 に答える 3

10

彼らは、Silverlight に別のアプローチが使用された理由について言及しましたか? プラットフォームの制限にすぎない可能性があります。

推奨されるアプローチは、ビュー モデル自体をビューの として絶対に使用することDataContextです。実際、ビューを明示的に作成するのではなく、ビュー モデルを作成し、WPF にビューを解決させる必要があります。これを行うには、次を登録しDataTemplateます。

<DataTemplate DataType="{x:Type local:MyViewModel}">
    <local:MyView/>
</DataTemplate>

次に、ビュー モデルのインスタンスを などに貼り付けるだけでContentControlItemsControlWPF は適切な でそれをレンダリングしますDataTemplate。これは、WPF のテンプレート システムのおかげで、DataTemplateビュー モデルを として持つことになります。DataContext

于 2009-04-02T10:31:23.100 に答える
3

Silverlight ビデオのコメントを読むと、ObservableCollection へのバインドが間違いであることがわかります。これにより、例外がスローされます。

ほとんどの場合、View は ViewModel にバインドされます (そうしない理由は実際には思いつきません)。

上記の Kents の例は、私が従う一般的なルールであり、ViewModel のコレクションを指定して、Silverlight にビューを作成させます。

于 2009-04-02T10:49:00.640 に答える