Каковы ваши стратегии связывания DataContext в MVVM? - PullRequest
6 голосов
/ 02 апреля 2009

Эти два 1-часовых видео показывают пошаговое руководство по использованию шаблона MVVM для создания простых приложений для викторин в Silverlight и WPF:

Реализация Model-View-ViewModel в Silverlight

Реализация Model-View-ViewModel в WPF

Что меня поражает в этом, так это насколько они отличаются структурно , например, как они используют DataBinding:

В подходе Silverlight мы устанавливаем для DataContext View значение ObservableCollection в ViewModel :

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

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

В подходе WPF мы устанавливаем для DataContext Window значение ViewModel .

<view:QuizView Margin="4" />

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

Просто кажется, что каждый пример MVVM, на который я смотрю, связывает DataContext в несколько новом варианте, и я пытаюсь найти некоторую твердую основу для ", как выполняется привязка DataContext в шаблон MVVM".

Что приходит вам в голову, когда вы решаете связать DataContext с чем-то: зачем связывать DataContext Window / View / ListBox / и т. Д. с ObservableCollection / ModelView / и т. Д. ? Каковы преимущества, недостатки, стратегии здесь?

Любой вклад приветствуется.

Ответы [ 3 ]

10 голосов
/ 02 апреля 2009

Они упоминали, почему для Silverlight использовался другой подход? Это может быть просто ограничением платформы.

Рекомендуемый подход заключается в абсолютном использовании самой модели представления в качестве DataContext вашего представления. На самом деле, вместо того, чтобы создавать представление явно, вы должны создавать модель представления и сделать так, чтобы WPF разрешил представление за вас. Для этого зарегистрируйте DataTemplate:

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

Затем вы просто вставляете свой экземпляр модели представления в ContentControl, ItemsControl или что-то еще, и WPF отобразит его с соответствующим DataTemplate. Это DataTemplate будет иметь модель представления в качестве DataContext благодаря системе шаблонов WPF.

3 голосов
/ 02 апреля 2009

Если вы прочтете комментарии к видео Silverlight, вы увидите, что привязка к ObservableCollection была ошибкой. Вызывает исключение.

Большую часть времени View связан с ViewModel (на самом деле я не могу придумать причину, когда я бы этого не делал)

Пример Kents выше - это общее правило, которому я следую, заставляя Silverlight создавать представление для меня с учетом коллекции ViewModels.

1 голос
/ 06 апреля 2009

У меня была некоторая поддержка от некоторых исключительно одаренных инженеров MS в нашем проекте, и они связывают текстовый вид View напрямую с моделью представления.

В идеале у вас не должно быть никакого кода за кодом, кроме ваших настроек контекста данных - на самом деле это можно сделать и в XAML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...