Что делает MVVM уникально подходящим для WPF? - PullRequest
9 голосов
/ 05 октября 2009

Model-View-ViewModel очень популярен среди WPF и Silverlight. Я использовал это для своих последних проектов, и я очень большой поклонник.

Я понимаю, что это уточнение MVP . Однако мне интересно, какие именно характеристики WPF (и Silverlight) позволяют MVVM работать и предотвращают (или, по крайней мере, затрудняют) работу этого шаблона с использованием других сред или технологий.

Я знаю, что MVVM сильно зависит от мощной технологии привязки данных в WPF. Это та особенность, которую многие статьи и блоги, по-видимому, упоминают как ключ к WPF, предоставляющий средства для сильного отделения View от ViewModel. Однако привязка данных существует в многих формах в других инфраструктурах пользовательского интерфейса. Есть даже проекты, такие как Truss , которые обеспечивают привязку данных в стиле WPF к POCO в .NET.

Какие функции, кроме привязки данных, делают WPF и Silverlight уникально подходящими для Model-View-ViewModel?

Ответы [ 4 ]

7 голосов
/ 05 октября 2009

Привязка данных, команды, шаблоны управления и XAML.

Без одного из них MVVM был бы намного сложнее, если не невозможен. Возьмите, например, ASP.net, он имеет часть ASPX (которая для примера эквивалентна XAML), имеет привязку данных, но не имеет команд или шаблонов управления, поэтому MVVM там невозможен. В WinForms у нас есть привязка данных, и это в значительной степени так, что также невозможно.

2 голосов
/ 07 июня 2010

Я реализовал шаблон кузена MVVM Model-View-Presenter в MFC, WinForms и даже MATLAB. Я согласен с оригинальным постом: WPF очень хорошо облегчает связывание данных, но вы можете использовать концепции на других платформах (хотя и с большим количеством кода).

Чтение Блога Джона Гроссмана , реальное отличие состоит в том, что пользовательский интерфейс должен быть написан на другом языке, нежели бизнес-логика. В идеале кажется, что разработку пользовательского интерфейса выполняют «дизайнеры», а не программисты.

Это та область, в которой WPF уникален - я не знаю ни одной другой среды разработки, которая бы работала для достижения этого идеала.

(Имейте в виду, я никогда не работал в достаточно большой команде, чтобы гарантировать преданных дизайнеров пользовательского интерфейса. Я не могу сказать, достижим ли этот идеал на самом деле).

2 голосов
/ 05 октября 2009

Короче говоря: это привязка данных.

Согласно Обзор привязки данных из MSDN :

Если привязка имеет правильные настройки и данные предоставляют соответствующие уведомления, то, когда данные изменяют свое значение, элементы, связанные с данными, отражаются автоматически. Привязка данных также может означать, что если внешнее представление данных в элементе изменяется, то базовые данные могут автоматически обновляться, чтобы отражать это изменение. Например, если пользователь редактирует значение в элементе TextBox, базовое значение данных автоматически обновляется, чтобы отразить это изменение.

Если вы правильно настроили свой XAML, вам нужно только взаимодействовать с вашим пользовательским интерфейсом с помощью viewmodel. WPF заботится об обновлении пользовательского интерфейса при изменении видовой модели и обновлении видовой модели при изменении пользовательского интерфейса (например, пользовательский ввод).

1 голос
/ 05 октября 2009

Я думаю, что поддержка команд (ICommand) в дополнение к великолепным возможностям связывания данных делает его пригодным для WPF и Silverlight.

...