2012-02-11 4 views
0

Я загрузил много примеров кода, чтобы помочь мне лучше понять MVVM в silverlight.MVVM With Silverlight

Одна из вещей, которые я заметил, - это несогласованность внутри кода примера, который я загрузил. Некоторые из них, например, реализуют INotifyPropertyChanged на моделях view, где другие реализуют его на модели.

Каков предпочтительный способ обработки изменений свойств, должен ли он обрабатываться на уровне модели или уровне viewmodel?

+1

возможно дубликат [В MVVM если ViewModel или модель реализации INotifyPropertyChanged?] (Http://stackoverflow.com/questions/772214/in-mvvm-should-the-viewmodel-or-model-implement-inotifypropertychanged) – ColinE

ответ

2

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

Одна из причин того, что в первую очередь используется модель просмотра, заключается в том, что она хранит данные из модели таким образом, что ее легко привязать к ней.
Итак, если основной причиной вашего INotifyPropertyChange in является обновление элемента, связанного в представлении, вы должны обновить его в viewmodel.

1

Обычно я использую DependencyProperty вместо INotifyPropertyChanged, но идея такая же.

Их цель - уведомить элементы управления представлением, к которым они привязаны, чтобы они изменились, чтобы представление могло обновляться. Это подразумевает слабую связь между представлением и тем, что содержит свойство или объект. В MVVM представление никогда не должно иметь никакой связи с моделью из-за разделения проблем.

Я часто могу это сделать, создав отдельный проект для каждого вида, вида и модели. Итак, ответ на ваш вопрос заключается в том, что INotifyPropertyChanged должен быть реализован на уровне viewmodel, потому что представление никогда не должно касаться чего-либо с уровня модели. Сказав это, MVVM - это всего лишь парадигма кодирования, облегчающая работу программистов, поэтому могут быть причины для ее реализации по-разному, если это означает облегчение вашей работы и отсутствие каких-либо негативных последствий.

+0

Спасибо за ваш ответ Брайан, я хотел бы отметить два ответа правильно, но, как ответила Эстер, я отметил это как правильный ответ и проголосовал за вас. –