WPF — GridAnimation, но «MVVM-изменен»

#c# #wpf #mvvm #storyboard

#c# #wpf #mvvm #раскадровка

Вопрос:

Я создал довольно приличную сеточную анимацию, которая хорошо работает (даже когда вы нажимаете кнопку спама, прерывая анимацию на полпути), но теперь я хочу преобразовать ее, используя подход MVVM. (Совсем недавно узнал об этом … до недавнего времени делал все в code-behind …)

Что я пробовал, так это устанавливать триггеры и раскадровку внутри кнопки, но я думаю, что это ограничивает некоторые функции (при нажатии на спам есть некоторые ошибки). То, что я рассматривал в качестве возможных вариантов, — это установка DataContext для каждой из кнопок, запускающих команды (что позволяет использовать несколько DataContexts — один для ViewModel, а другой специально для GridAnimation), или что-то вроде «вложенности» или как-то создать отношения родитель-потомок с моделями и ViewModels (но я пока не могу полностью разобраться с этим, поскольку я только недавно обнаружил MVVM). Мне было интересно, есть ли более оптимальные подходы.

https://github.com/Ravidelle/GridAnimation

rtGridAnimation — рабочая версия, лежащая в основе кода

vmGridAnimation — попытка MVVMed-версии, очень глючная

Комментарии:

1. Я не думаю, что существует способ MVVM, поскольку анимация связана с представлением, поэтому ViewModel не должен знать об этом. Если там есть какая-то другая бизнес-логика, она действительно должна перейти к ViewModel, но я думаю, что логика анимации не должна. Это была просто логика анимации, которую вы хотели переместить?

2. Да, я думаю, это правильный способ сказать это. Я хочу, чтобы бизнес-логика и анимационная логика были отделены друг от друга. Есть ли для этого конкретная тема или термин? Или правильный способ разделения / реализации логики анимации?

3. Думая о способе MVVM, вы могли бы подумать о том, чтобы переместить свой код в пользовательский элемент управления и использовать поведение (возможно, связанный щелчок предварительного просмотра) для обработки анимации и позволить использовать кнопку привязки для просмотра модели для бизнес-логики