2010-06-02 3 views
3

J'ai lu beaucoup de blogs sur la meilleure façon de jouer du son/Animation mais si possible, je voudrais voir un exemple simplifié sur la façon dont cela est fait afin que je comprenne mieux.Comment jouer son et animations dans MVVM

Donc, pour ma compréhension MVVM

The View -> Son et animation

ViewModel -> Si une valeur est vrai, je voudrais jouer le son et l'animation sur la vue.

Maintenant Comment ferais-je cela? On m'a dit d'utiliser des interfaces comme ISoundService et IAnimationService. Mettre en œuvre dans la vue, puis faire quoi? Si possible, un exemple pratique d'os nu aidera beaucoup.

Répondre

8

En ce qui concerne le son, ce n'est pas nécessairement la vue qui le gère. Par exemple, je fais quelque chose comme ça pour jouer un son:

public interface IAudioPlayer 
{ 
    void Play(string fileName); 
} 

public class AudioPlayer : IAudioPlayer 
{ 
    private readonly SoundPlayer player = new SoundPlayer(); 

    public void Play(string fileName) 
    { 
     player.Stream = File.OpenRead(fileName); 
     player.Play(); 
    } 
} 

Puis, j'utiliser l'injection de dépendance pour passer dans mon ViewModel:

public class TheViewModel 
{ 
    public TheViewModel(IAudioPlayer audioPlayer) 
    { 
     // probably store it as a private readonly field for later use. 
    } 
} 

Une autre option serait d'avoir un service de son assis là-bas, en écoutant les événements que le ViewModel envoie via un système de messagerie ... EventAggregator, par exemple.

En ce qui concerne l'animation, les mêmes types d'approches peuvent fonctionner. Habituellement, je définis l'animation dans la vue en XAML. Ensuite, dans la vue, j'écoute une sorte d'événement à déclencher à partir du ViewModel pour indiquer à la vue d'exécuter cette animation. Par ailleurs, dans le passé, j'ai utilisé la liaison de données pour doubler les valeurs contrôlées dans ViewModel, de sorte qu'il existe toujours un comportement testable qui gère l'animation.

Une autre approche que j'ai utilisée est une chose hybride MVVM/MVP, où le ViewModel reçoit une interface IView avec une méthode appelée ExecuteDeletionAnimation. ViewModel appelle la méthode et la vue implémente la méthode.

Espérons que cela aide un peu?

+0

Je ne pense pas qu'il y ait un SoundPlayer dans Silverlight, c'est comme ça que la question a été taguée. –

1

Je pense que la structure ressemblerait à quelque chose comme ...

Modèle -> Objet contenant son et vidéo/bitmaps

View -> Contrôle visuel pour contenir le Storyboard

ViewModel -> Contrôleur pour la gestion des événements d'animation

Je ne me suis pas trop penchée sur l'animation WPF mais, d'après ce que j'ai vu, vous avez besoin d'une relation assez étroite entre les UIElements et le contrôleur. Lorsque MVVM excelle est ses séparations de la couche logique de la couche de présentation, cela peut vous causer beaucoup de douleur. Au lieu d'utiliser MVVM, vous pouvez regarder le modèle MVC qui a une relation plus étroite entre la vue et le contrôleur.