Использование WPF моя команда пытается отделить дизайн и код с использованием шаблонов проектирования MVVM. Чтобы достичь этого, мы постепенно отходим от подхода UserControl, поскольку он имеет высокий уровень сцепления между дизайном и кодом. Мы изучаем использование шаблонов управления, стилей и DataTemplates в сочетании с классом ViewModel. На сегодняшний день мы получили большую часть этой работы.WPF View-ViewModel Loosely connected communication
Проблемы, которые возникают у нас, связаны с сообщениями/уведомлениями между View и ViewModel. В настоящее время мы «решили» проблемы связи View -> Viewmodel с помощью ICommand. т. е. мы создаем кнопку и привязываем ее параметр «Команда» к имени RelayCommand, определенному в ViewModel. Таким образом, нажатие кнопки или другое командное событие, поднятое из представления, вызывает функцию, определенную в ViewModel. Это работает.
В нашей основной проблеме заключается в том, чтобы уведомление было запущено в обратном порядке: например, изменение данных в ViewModel должно инициировать обновление в представлении. Мы делали это с использованием NotifyPropertyChanged и DataTriggers, однако это не удовлетворяет наши потребности. Нам нужно иметь возможность поднять какое-то событие в Viewmodel и подписаться на это событие. Мы искали ответ на этот вопрос и узнали об обоих RoutedEvents и AttachedBehaviors. RoutedEvents походил на победителя решения, однако из нашего исследования RoutedEvents не могут быть зарегистрированы в ViewModel, который не распространяется на UIElement, и мы особенно стараемся, чтобы наш код был отделен от дизайна.
В конечном итоге мы пытаемся создать ViewModel, где можно задать параметр или вызвать функцию, которая приведет к возникновению события или поведения в представлении и последующему запуску анимации. Мы работали с DataTriggers, однако мы пытаемся отделить наши анимации от ControlTemplate, и это вызывает проблемы, поскольку DataTemplate, который содержит DataTriggers, не имеет доступа к Storyboards, определенным в ControlTemplate.
Может кто-нибудь указать нам в правильном направлении? В частности, создание события в ViewModel (которое не требует расширения UIElement) и подписки на это событие в представлении и активации раскадровки.
Благодаря
Удалось заставить его работать, определяя раскадровку как ресурс, а затем привязывая этот ресурс раскадровки к ControlTemplate.Triggers Datatrigger. Таким образом, событие NotifyPropertyChanged запускает обновление, и ControlTemplate отвечает за обработку его собственных анимаций. Выполняя все это, ControlTemplate отвечает за поддержание состояния анимации и анимации на основе свойства, определенного в ViewModel. – user2961221