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?
Je ne pense pas qu'il y ait un SoundPlayer dans Silverlight, c'est comme ça que la question a été taguée. –