在MVVM中,从Model还是ViewModel播放媒体文件?

5
这个问题与MediaElement无关——关于这一点,我已经阅读了在ViewModel中使用MediaElement.play()MVVM模式违规: MediaElement.Play(),我都同意。

但是假设我们使用第三方程序集,例如NAudio。我们不必找到一种将现有的XAML媒体控件的交互功能插入到我们的ViewModel中的方法。相反,我们可以在视图中使用例如InteractionTrigger,在ViewModel中订阅它,并调用给定媒体文件的播放命令。

现在我的问题是:在MVVM模式下,这是否仍然适合ViewModel?还是我们应该将其传递到Model中并从那里播放文件?

1个回答

8

我认为这完全取决于媒体文件的性质及其与您应用程序的核心逻辑的关系。

它只是在单击某些东西时播放的UI反馈声音效果吗?则停留在视图中。

它是一个音乐播放器应用,可以从播放列表中播放音乐吗?那就是核心逻辑,应该放在VM中。

如果我不确定某个东西应该放在哪里,我会想象一下我的应用程序上有一个使用文本控制台而非WPF的虚拟“视图”。如果即使由控制台驱动,逻辑仍然存在,则应放置在VM中。


谢谢,我真的很喜欢你的控制台想法。但是你说的是播放媒体文件不会发生在模型中,对吗?好吧,从控制台的角度来看,我想这是有道理的:播放文件实际上是呈现它,只是不是以视觉方式,而是以声学方式。哇,我真的很喜欢你的控制台想法开启的途径! - Informagic
想象一个由控制台驱动的音乐播放器。您仍然希望它能播放音乐,因此可以从视图模型中播放音乐。如果某个声效之所以能够播放仅仅是因为它是某个炫酷 GUI 的一部分,那么它将保留在该 GUI 中的视图中。 - GazTheDestroyer
1
再次感谢,这绝对具有说服力。而且,从现在开始我会将控制台的思路变成我的,因此也感谢你。 - Informagic
音乐播放器应用程序:我会实现一个IMusicPlayService并将其交给ViewModel。VM可以决定何时播放,而服务将知道如何播放。 - Sir Rufo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接