3

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

所以我对 MVVM 的理解

视图-->声音和动画

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

现在我将如何去做。我被告知要使用 ISoundService 和 IAnimationService 等接口。在View中实现然后做什么?如果可能的话,一个可行的裸骨示例将有很大帮助。

4

2 回答 2

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();
    }
}

然后,我使用依赖注入将其传递到我的 ViewModel 中:

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

另一种选择是让一个健全的服务坐在那里,监听 ViewModel 通过一些消息系统发送的事件......例如 EventAggregator。

就动画而言,相同类型的方法可以工作。通常,我在 XAML 中的视图中定义动画。然后,在 View 中,我监听 ViewModel 触发的某种事件,以告诉 View 执行该动画。

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

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

希望这个对你有帮助?

于 2010-06-07T01:43:51.570 回答
1

我认为结构看起来像......

模型 -> 包含声音和视频/位图的对象

视图 -> 包含情节提要的视觉控制

ViewModel -> 用于处理动画事件的控制器

我没有深入研究 WPF 动画,但据我所见,您需要在 UIElements 和 Controller 之间建立非常密切的关系。MVVM 擅长的地方是逻辑层与表示层的分离,这可能会给您带来相当大的痛苦。您可能希望查看 MVC 模式,而不是使用 MVVM,它在 View 和 Controller 之间具有更密切的关系。

于 2010-06-03T10:53:41.853 回答