wpf mvvm путаница - PullRequest
       16

wpf mvvm путаница

3 голосов
/ 04 февраля 2010

согласно моему пониманию о mvvm.

есть модель (класс сущностей, который также реализует inotify ...), view (код xaml) и некоторый класс как vm (вид контроллера, который обычно наследует icommand), чтобы позволить нам создавать события / команды, которые будут генерироваться на определенных событие ...

Мне просто интересно узнать разницу между классом viewmodel и кодом xaml позади класса ... почему бы нам просто не рассмотреть и не улучшить код позади ...

У меня нет веских оснований оправдывать это ...

или пишите что-нибудь с примером, чтобы очистить mvvm ... и почему mvc или mvp - ад для wpf-приложения ????

Ответы [ 5 ]

5 голосов
/ 04 февраля 2010

Модель не реализует INotifyPropertyChanged, а ViewModel. Фактическое представление WPF привязывает данные к ViewModel. Сейчас для этого есть много документации.

http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

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

http://blogs.msdn.com/johngossman/archive/2005/10/08/478683.aspx

На практике, однако, только маленький подмножество пользовательского интерфейса приложения может быть данными привязаны непосредственно к модели, особенно если модель уже существующий класс или схема данных над который разработчик приложения не имеет контроль. Модель, скорее всего, есть типы данных, которые не могут быть сопоставлены непосредственно с элементами управления. Пользовательский интерфейс может захотеть выполнить сложные операции это должно быть реализовано в коде, который не имеет смысла в нашем строгом определение вида, но слишком конкретные для включения в модель (или не пришли с уже существующим модель). Наконец нам нужно место для поставить состояние просмотра, такое как выбор или режимы. ViewModel несет ответственность для этих задач. Термин означает «Модель взгляда», и можно думать как абстракция зрения, но это также обеспечивает специализацию Модель, которую может использовать представление привязки данных. В этой последней роли ViewModel содержит преобразователи данных которые преобразуют типы моделей в представление типы, и он содержит команды Вид можно использовать для взаимодействия с Модель.

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

4 голосов
/ 04 февраля 2010

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

Также см. Этот вопрос SO для получения дополнительных ссылок: MVVM: учебное пособие от начала до конца?

1 голос
/ 04 февраля 2010

почему бы нам просто не рассмотреть и не улучшить код, стоящий за ...

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

Как и во всех шаблонах проектирования, слепо следовать ему - не лучшая идея. Для очень маленьких окон MVVM может не иметь смысла. Для больших окон MVVM вынуждает вас разделить задачи, что обычно делает ваш код позади файла и ваш класс MVVM более легким для чтения, понимания и отладки.

0 голосов
/ 04 февраля 2010

почему бы нам просто не рассмотреть и не улучшить код позади ...

Код позади часто (всегда?) Самый простой подход ... если вы разработчик.Но MVVM призван помочь не только разработчику.MVVM предназначен для базы данных девушки и графического парня тоже.
Разделение M (для БД) и V (для художника) и VM (для вас) позволяет каждому работать независимо друг от друга.Так, например, вам не нужно ждать, пока графический пользователь создаст пользовательский интерфейс, прежде чем вы сможете подключить БД.Вы все можете работать параллельно (теоретически).

Разделение интересов означает отдельные задания.

0 голосов
/ 04 февраля 2010

Во-первых, для целей MVVM вам не нужна виртуальная машина для наследования ICommand. Вместо этого ВМ содержит набор свойств типа, унаследованных от ICommand. Так что View просто привязывается к этим свойствам. F.i.:

<Button Command="{Binding DoSomethingCommand}" />

А кодовый код не используется, потому что это в основном неотделимая часть View. Это тот же класс, что и ваш вид. Вы не можете легко проверить это, и ваш код часто тесно связан с XAML.

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

Предлагаю вам прочитать несколько вводных статей на эту тему. Это не так смущает. Это может быть первый: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

...