在 MVVM 中,从 Model 或 ViewModel 播放媒体文件?
Posted
技术标签:
【中文标题】在 MVVM 中,从 Model 或 ViewModel 播放媒体文件?【英文标题】:In MVVM, play media file from Model or ViewModel? 【发布时间】:2019-03-10 20:50:17 【问题描述】:这个问题与MediaElement
无关——关于这个,MediaElement.play() from within ViewModel和MVVM pattern violation: MediaElement.Play()我都看过,我都同意。
但是假设我们使用的是第三方程序集,例如 NAudio。我们不必找到将现有 XAML 媒体控件的交互功能插入 ViewModel 的方法。相反,我们可以简单地在 View 中使用 InteractionTrigger
s,在 ViewModel 中订阅它,然后在给定的媒体文件上调用播放命令。
现在我的问题是:在 MVVM 模式中,这仍然适合 ViewModel 吗?还是我们应该把它交给模型并从那里播放文件?
【问题讨论】:
【参考方案1】:我会说这完全取决于媒体文件的性质及其与应用核心逻辑的关系。
它只是当您单击某物时播放的 UI 反馈音效吗?留在视图中。
它是从播放列表播放音乐的音乐播放器应用吗?这是核心逻辑,属于虚拟机。
如果我不确定某些东西的位置,我会考虑在我的应用程序上使用文本控制台而不是 WPF 的假想“视图”。如果即使由控制台驱动,逻辑仍然存在,则它存在于 VM 中。
【讨论】:
谢谢,我真的很喜欢你的控制台想法。但是你的意思是在模型中播放媒体文件不会发生,对吧?好吧,考虑一下控制台的方式,我想这是有道理的:播放文件实际上是在呈现它,只是不是以视觉的方式,而是以声音的方式。哇,我真的很喜欢你的控制台打开的途径! 想一想控制台驱动的音乐播放器。您仍然希望它播放音乐,所以是的,从视图模型播放音乐。如果声音效果只是因为它是某个特殊 GUI 的一部分而播放,那么它会与视图中的 GUI 保持一致。 再次感谢,这绝对令人信服。另外,从现在开始,我将把控制台的思路变成我自己的,所以也谢谢你。 MusicPlayerApp:我会实现一个 IMusicPlayService 并将它交给 ViewModel。 VM 可以决定何时播放,服务将知道如何播放。以上是关于在 MVVM 中,从 Model 或 ViewModel 播放媒体文件?的主要内容,如果未能解决你的问题,请参考以下文章
在 MVVM 中,从 Model 或 ViewModel 播放媒体文件?