【问题标题】:How to play Sound and Animations in MVVM如何在 MVVM 中播放声音和动画
【发布时间】:2010-06-02 01:48:41
【问题描述】:

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

我对 MVVM 的理解

视图-->声音和动画

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

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

【问题讨论】:

    标签: silverlight mvvm mvvm-light


    【解决方案1】:

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

    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 实现方法。

    希望这会有所帮助?

    【讨论】:

    • 我认为 Silverlight 中没有 SoundPlayer,这就是问题的标记方式。
    【解决方案2】:

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

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

    视图 -> 包含故事板的可视化控件

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

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

    【讨论】:

      猜你喜欢
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      相关资源
      最近更新 更多