2010-12-15 3 views
2

Поскольку я изучаю шаблон MVVM, я задал вопрос. Я создаю образец заметок. В этом приложении вы можете увидеть список заметок с NotesView. DataContext NotesView - это NotesModelView.MVVM Модель для коллекции моделей?

Мой вопрос должен NotesModelView содержит коллекцию NoteModel или NoteModelView (которая содержит NoteModel)?

ответ

1

Я склоняюсь к тому, чтобы обернуть все классы моделей в viewmodels, поэтому мой общий ответ будет состоять из коллекции NoteViewModel, которая обертывает NoteModel.

Но я также являюсь поклонником DRY principle, поэтому в тех случаях, когда ViewModel не добавляет каких-либо преимуществ вообще (например, мне не нужно переформатировать данные, и мне не нужны изменения уведомление, и я не возражаю против того, чтобы показать исходную модель). Иногда я нарушаю это правило.

Поскольку вы пытаетесь узнать MVVM, мое предложение для данного конкретного случая должно быть идти с коллекцией viewmodels. Это даст вам лучшее представление о MVVM и поможет вам сделать эти различия позже, когда вы столкнулись с этим вопросом в будущем приложении.

+0

Спасибо за совет. Я все еще поднимаюсь на эту крутую кривую обучения, поэтому я хочу убедиться, что я правильно понял шаблон до того, как я начните отклоняться от него. – Jackson

+0

Нет проблем .. И не стесняйтесь проголосовать за все ответы, которые вы найдете полезными ;-) –

1

Хорошо, ваше именование немного запутанно, я бы выбрал более чистый стандарт именования! Для людей обычно рекомендуется открывать представления с помощью «Просмотр» и просматривать модели с помощью «ViewModel».

Итак, у вас есть NotesView, DataContext которого является NotesViewModel. На вашем NotesViewModel у вас должна быть коллекция Notes (или NotesModel, если вы хотите это назвать). В NotesViewModel не должно быть коллекции NotesViewModel, потому что это необязательно, поскольку вы, вероятно, хотите отображать только данные Note в своем NotesView.

+0

Извините за запутанное имя и остальное, что это не стиль именования, который я использую в приложении. Я просто подумал, что было бы легче понять, добавила ли я модели с моделью. – Jackson

2

Я всегда обволакиваю свои модели в поле зрения моделей. Таким образом, любые изменения, внесенные пользователем, применяются только к моделям просмотра, а не к базовым моделям, пока пользователь не захочет зафиксировать эти изменения (например, кнопкой «Сохранить»), и если пользователь не хочет совершать, вы можете просто отбросить модель обзора и начать с нуля без изменения вашей модели. Это особенно важно при работе с объектами/объектами базы данных, поскольку изменения, сделанные непосредственно сущности, могут быть болезненными для отката (по крайней мере, если вы используете Entity Framework)

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

+0

Спасибо, я не думал об этом! – Jackson

0

В вашем примере у вас должно быть примечание - в качестве модели, и вы должны определить ObservableCollection of Note, список, который будет представлять список ваших моделей. Этот список будет в вашем ViewModel, и вы можете привязать его к любому представлению в вашем проекте.

Смежные вопросы