2009-09-29 2 views
2

Сценарий: у меня есть (числовое) текстовое поле, кнопка и ярлык. Когда кнопка нажата, я хотел бы ярлык, чтобы «оживить» в числовое значение в текстовом поле (например, вращающийся циферблат)Динамические анимации, Команды и разделение проблем

Дано:

а), что анимации в раскадровки не может иметь DataBindings (потому что они не являются FrameworkElements) b) Отсутствие триггеров в Silverlight

Что является лучшим и с минимальным сочетанием модели представления с раскадройкой просмотра, способом обновления целевого значения анимации и запуска анимации, когда кнопка нажал?

Примечание: Сценарий концептуальный, так что не сосредоточиться на специфике чисел «оживлённых» или что-нибудь

ответ

2

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

Один из недостатков заключается в том, что ваша анимация теперь находится в коде, если только вы не храните шаблонный (только с поддельными значениями для начала) его версию в файле ресурсов где-нибудь, где вы можете загрузить его по мере необходимости и заменить шаблонные значения.

Этот article from Josh Smith, по-видимому, является авторитетом в отношении приложенных поведений;

http://joshsmithonwpf.wordpress.com/2008/08/30/introduction-to-attached-behaviors/

+0

Да, это направление, о котором я думаю думать. Я предпочитаю иметь нулевой код в коде. Благодаря! –

0

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

Это не самый подходящий для MVVM подход; однако анимации в WPF могут быть сложными в XAML. Поскольку это решение на самом деле является лишь обходным решением для ограничения XAML, кажется, что он правильно привязывает код непосредственно к представлению. Аналогично, если взгляды были издеваемы, тогда не было бы элементов структуры для анимации, поэтому на самом деле не было бы смысла размещать этот код на стороне виртуальной машины.

У кого-нибудь есть лучший подход?

+0

Вы всегда можете добавить свойство AnimatedValue в IViewInterface и есть что получить/установить значение от самой анимации, абстрагируясь анимацией из VM. Тем не менее, я бы предпочел бы более хороший способ:) –

Смежные вопросы