Ответ 1
Я расскажу вам о особенно полезном
Почему мы ищем MVVM поверх MVC или MVP при работе с WPF?
Какую дополнительную выгоду мы получаем от этого?
Edit:
Честно говоря, сегодня у меня было интервью, и меня задали этот вопрос. Я ответил как INotifyPropertyChanged, ICommand, IValue Convertor.. но он не был удовлетворен. Впредь я задал этот вопрос
Заранее спасибо
Я расскажу вам о особенно полезном
Это мои специфические для MVVM
Другие два шаблона действительно являются отдельными с точки зрения проблем, которые они затрагивают. Вы можете использовать MVVM с MVP и MVC (большинство хороших образцов там делают какую-то форму).
На самом деле MVP (с пассивным представлением, а не надзорным контроллером) на самом деле является всего лишь вариантом MVVM, на мой взгляд.
WPF имеет лучшую привязку данных, чем любая другая структура пользовательского интерфейса, которая MVVM будет непослушна без
MVVM обеспечивает единичную тестируемость и отличный обзор-агностицизм, что позволяет использовать
Запеченные в поддержку ICommand и INotifyPropertyChanged являются двумя самыми большими преимуществами. Использование MVVM позволяет легко подключить команды и подключить данные к интерфейсу WPF. Все работает.
Я лично вижу MVVM не как преимущество, а как обязательство для тех, кто хочет использовать интересные функции WPF.
WPF очень сильно построен с привязкой данных в ядре, чтобы обеспечить разделение пользовательского интерфейса от модели. Но способ привязки данных технически выполняется в WPF несколько особым образом, поскольку он связан с такими классами, как:
Из-за этого вы просто не можете написать модель так, как хотите, используя стандартную технологию .NET. Например, WPF TreeView практически невозможно использовать без использования привязки данных и шаблонов. Вы просто не можете заполнить его просто так, как если бы вы использовали общую модель в Winforms, например. Он должен быть привязан к иерархической модели с использованием ObservableCollection для представления дочерних элементов node.
Итак, пусть V представляет собой код XAML и его копию кода (поэтому он привязан к WPF как технология), и пусть M представляет вашу модель (так или иначе она не привязана к технологии интерфейса WPF).
Ну, у вас никогда не будет этой работы должным образом в WPF только с этими V и M.
Вы должны добавить что-то между ними. Что-то, что совместимо с WPF и понимает вашу модель. Что-то, что говорит DependencyProperty, ObservableCollection и INotifyPropertyChanged. Это то, что называется VM.
В качестве побочного примечания альтернативой MVVM является сборка V и M (без подключения к VM), при этом M является WPF-совместимым, но все еще с разумной независимостью пользовательского интерфейса. Исторически ObservableCollection был в сборке WindowsBase.dll(который был отправлен с WPF), поэтому было действительно странно связывать общую модель с чем-то, связанным с технологией пользовательского интерфейса. С тех пор он был возвращен в System.dll. Даже тогда, иногда трудно сохранить чистую модель VM без настройки M специально для WPF...
Способность кода XAML к привязке к данным, а также наличие триггеров нарушают шаблоны MVP и MVC.