Страницы с тегами : MVVM
Паттерн MVVM. Часть 2.
В первой части я рассказал про байндинги и команды, которые позволяют вынести из формы всю логику во viewmodel.
На просторах интернета можно найти MVVM Toolkit, в котором есть необходимый код, упрощающий разработку приложений с использованием MVVM.
Кроме байндингов и команд немаловажную роль в MVVM играют шаблоны данных (DataTemplate). Они позволяют задавать шаблоны отображения определенных типов, что заметно упрощает композицию элементов UI.
Наиболее подробно, с примерами, применение шаблонов описано в этой статье.
Паттерн MVVM. Часть 1.
MVVM – Model – View – ViewModel – паттерн организации PL (presentation layer – уровень представления).
Паттерн MVVM применяется при создании приложений с помощью WPF и Silverlight. Этот паттерн был придуман архитектором этих самых WPF и Silverlight - John Gossman (его блог). Паттерн MVVM применяется в Expression Blend.
Идеологически MVVM похож на Presentation Model описанный небезызвестным Фаулером, но MVVM сильно опирается на возможности WPF.
Основная особенность MVVM заключается в том, что все поведение выносится из представления (view) в модель представления (view model). Связывание представления и модели представления осуществляется декларативными байндингами в XAML разметке. Это позволяет тестировать все детали интерфейса не используя сложных инструментальных средств.
Я сначала хотел кратко описать применение MVVM и Unity для построения PL, но понял что одного поста для описания возможностей MVVM очень мало.
В WPF для передачи данных между объектами и визуальными элементами используются байндинги (binding – привязка) в простонародии биндинги. Передача может быть как однонаправленная, так и двунаправленная. Работают байндинги с помощью зависимых свойств (DependencyProperty) или интерфейса INotifyPropertyChanged. Передача управляющих воздействий от визуальных элементов осуществляется с помощью команд, реализующих интерфейс ICommand.
Для начала надоевший уже пример SayHello.
Как всегда используется супер-сложный класс бизнес логики:
public interface ISayHelloService { string SayHello(string name); } public class SayHelloSerivce : ISayHelloService { public string SayHello(string name) { return "Привет, " + name; } }