2009-09-29 7 views
2

Scénario: J'ai une zone de texte (numérique), un bouton et une étiquette. Lorsque le bouton est cliqué, je voudrais l'étiquette de « animer » à la valeur numérique dans la zone de texte (comme un cadrant)Animations dynamiques, commandes et séparation des préoccupations

Vu:

a) que les animations dans les storyboards ne peuvent pas avoir DataBindings (parce qu'ils ne sont pas des FrameworkElements) b) l'absence de déclencheurs dans Silverlight

Quel est le meilleur, et avec le moins de couplage du modèle de vue au storyboard de la vue, moyen de mettre à jour la valeur d'animation cible et de démarrer l'animation lorsque le bouton est cliqué?

Note: Le scénario est conceptuel, il ne faut pas se concentrer sur les détails des numéros « animating » ou quoi que ce soit

Répondre

2

Si votre objectif est strictement de réduire le code-behind dans la vue, je pense qu'un comportement attaché sur l'étiquette fonctionnerait pour cela. Le comportement attaché sur l'étiquette exposerait le nombre à animer et quand ce nombre change une animation (en code) serait exécutée pour animer de l'ancienne valeur à la nouvelle valeur. Un inconvénient est que votre animation est maintenant dans le code, sauf si vous stockez une version de modèle (juste des fausses valeurs pour commencer) dans un fichier de ressources quelque part où vous pouvez le charger si nécessaire et remplacer les valeurs de modèle.

Cette article from Josh Smith semble être l'autorité sur les comportements attachés;

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

+0

Ouais c'est la direction que je pense penser à prendre. Je préfère avoir zéro code dans le code derrière. Merci! –

0

J'ai récemment pour résoudre un problème similaire dans une application MVVM. Mon problème était que j'avais besoin d'animer la hauteur d'un conteneur de zéro à auto. Puisque Auto est une valeur dynamique, j'ai reconnu que l'animation (ou le storyboard) devrait être construite (ou manipulée) à la demande. La solution que j'ai mise en place impliquait d'utiliser view code-behind pour mettre à jour et déclencher l'animation.

Cette approche n'est pas la plus conviviale MVVM; cependant, les animations dans WPF peuvent être difficiles en XAML. Étant donné que cette solution est vraiment juste une solution de contournement pour une limitation XAML, il semble correct d'attacher le code directement à la vue. De même, si les vues étaient raillées, il n'y aurait pas d'éléments de structure à animer, donc cela n'aurait aucun sens de placer ce code du côté VM.

Est-ce que quelqu'un a une meilleure approche?

+0

Vous pouvez toujours ajouter une propriété AnimatedValue à IViewInterface et ont que get/valeurs de réglage de l'animation elle-même, abstraire l'animation de la machine virtuelle. Je préférerais quand même un meilleur chemin, cependant;) –

Questions connexes