如何在MVVM中播放声音和动画

Mik*_*iaz 3 silverlight mvvm mvvm-light

我已经阅读了很多关于播放声音/动画的最佳方式的博客,但如果可能的话,我希望看到一个关于如何完成这个的简化示例,以便我更好地理解.

所以我对MVVM的理解

视图 - >声音和动画

ViewModel - >如果某个值为true,我想在视图上播放声音和动画.

现在,我将如何做到这一点.我被告知要使用像ISoundService和IAnimationService这样的接口.在View中实现然后做什么?如果可能的话,一个可行的裸骨示例将有很多帮助.

Bri*_*sio 8

就声音而言,这不一定是处理它的视图.例如,我这样做是为了播放声音:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,我使用依赖注入将它传递给我的ViewModel:

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

另一个选择是在那里有一个健全的服务,听取ViewModel通过某个消息传递系统发送的事件......例如,EventAggregator.

就动画而言,相同类型的方法可以起作用.通常,我在XAML中的View中定义动画.然后,在View中,我会侦听从ViewModel触发的某种事件,以告诉View执行该动画.

此外,在过去,我使用数据绑定来加倍在ViewModel中控制的值,因此仍然存在一些可测试的行为来管理动画.

我使用的另一种方法是混合MVVM/MVP,其中ViewModel通过一个名为ExecuteDeletionAnimation的方法传递一个IView接口.ViewModel调用该方法,View实现该方法.

希望这个对你有帮助?