wpf - MVVM 模式违规 : MediaElement. Play()

标签 wpf mvvm visibility mediaelement

我知道 ViewModel 不应该了解 View,但是除了在 ViewModel 中引用 View(或直接 MediaElement)之外,如何从 ViewModel 调用 MediaElement.Play() 方法?
其他(链接)问题:如何在不违反 MVVM 模式的情况下管理 ViewModel 中的 View 控件可见性?

最佳答案

1) 不要从 View 模型调用Play()。相反,在 View 模型中引发一个事件(例如 PlayRequested)并在 View 中监听此事件:

查看模型:

public event EventHandler PlayRequested;
...
if (this.PlayRequested != null)
{
    this.PlayRequested(this, EventArgs.Empty);
}

查看:

ViewModel vm = new ViewModel();
this.DataContext = vm;
vm.PlayRequested += (sender, e) =>
{
    this.myMediaElement.Play();
};

2) 您可以在 View 模型中公开一个公共(public) bool 属性,并将控件的 Visibility 属性绑定(bind)到该属性。由于 Visibility 的类型为 Visibility 而不是 bool,因此您必须使用转换器。

您可以找到此类转换器的基本实现 here 。 这个related question也可能对你有帮助。

关于wpf - MVVM 模式违规 : MediaElement. Play(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10631748/

相关文章:

css - 使用 Raphael JS 在 Opera 中渲染 SVG 时出现问题

c# - 如何使用c#在word中插入脚注

wpf - 使用 WPF 和 MVVM 编辑 F# 记录

c# - 如何将数据绑定(bind)到控件的 Visibility 属性

wpf - 滚动到 DataGrid 底部时出现的行下方的额外空间?

c# - Silverlight - 验证一个属性

scala - 是否可以在 Scala 中声明一个公共(public)字段

c# - 当从不同的窗口调用 repository.save 时,mvvm 更新 ListView

wpf - 标题未显示在 WPF ListView 中

c# - WPF Canvas 缩放/变换以适合