【问题标题】:In MVVM, play media file from Model or ViewModel?在 MVVM 中,从 Model 或 ViewModel 播放媒体文件?
【发布时间】:2019-03-10 20:50:17
【问题描述】:

这个问题与MediaElement无关——关于这个,MediaElement.play() from within ViewModelMVVM pattern violation: MediaElement.Play()我都看过,我都同意。

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

现在我的问题是:在 MVVM 模式中,这仍然适合 ViewModel 吗?还是我们应该把它交给模型并从那里播放文件?

【问题讨论】:

    标签: c# wpf mvvm


    【解决方案1】:

    我会说这完全取决于媒体文件的性质及其与应用核心逻辑的关系。

    它只是当您单击某物时播放的 UI 反馈音效吗?留在视图中。

    它是从播放列表播放音乐的音乐播放器应用吗?这是核心逻辑,属于虚拟机。

    如果我不确定某些东西的位置,我会考虑在我的应用程序上使用文本控制台而不是 WPF 的假想“视图”。如果即使由控制台驱动,逻辑仍然存在,则它存在于 VM 中。

    【讨论】:

    • 谢谢,我真的很喜欢你的控制台想法。但是你的意思是在模型中播放媒体文件不会发生,对吧?好吧,考虑一下控制台的方式,我想这是有道理的:播放文件实际上是在呈现它,只是不是以视觉的方式,而是以声音的方式。哇,我真的很喜欢你的控制台打开的途径!
    • 想一想控制台驱动的音乐播放器。您仍然希望它播放音乐,所以是的,从视图模型播放音乐。如果声音效果只是因为它是某个特殊 GUI 的一部分而播放,那么它会与视图中的 GUI 保持一致。
    • 再次感谢,这绝对令人信服。另外,从现在开始,我将把控制台的思路变成我自己的,所以也谢谢你。
    • MusicPlayerApp:我会实现一个 IMusicPlayService 并将它交给 ViewModel。 VM 可以决定何时播放,服务将知道如何播放。
    猜你喜欢
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    相关资源
    最近更新 更多