我已经阅读了很多关于播放声音/动画的最佳方式的博客,但如果可能的话,我希望看到一个关于如何完成的简化示例,以便我更好地理解。
所以我对 MVVM 的理解
视图-->声音和动画
ViewModel-->如果某个值为真,我想在视图上播放声音和动画。
现在我将如何去做。我被告知要使用 ISoundService 和 IAnimationService 等接口。在View中实现然后做什么?如果可能的话,一个可行的裸骨示例将有很大帮助。
我已经阅读了很多关于播放声音/动画的最佳方式的博客,但如果可能的话,我希望看到一个关于如何完成的简化示例,以便我更好地理解。
所以我对 MVVM 的理解
视图-->声音和动画
ViewModel-->如果某个值为真,我想在视图上播放声音和动画。
现在我将如何去做。我被告知要使用 ISoundService 和 IAnimationService 等接口。在View中实现然后做什么?如果可能的话,一个可行的裸骨示例将有很大帮助。
就声音而言,这不一定是处理它的视图。例如,我为播放声音做了这样的事情:
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 实现方法。
希望这个对你有帮助?
我认为结构看起来像......
模型 -> 包含声音和视频/位图的对象
视图 -> 包含情节提要的视觉控制
ViewModel -> 用于处理动画事件的控制器
我没有深入研究 WPF 动画,但据我所见,您需要在 UIElements 和 Controller 之间建立非常密切的关系。MVVM 擅长的地方是逻辑层与表示层的分离,这可能会给您带来相当大的痛苦。您可能希望查看 MVC 模式,而不是使用 MVVM,它在 View 和 Controller 之间具有更密切的关系。