【问题标题】:Calling UIElement Functions from View Model从视图模型调用 UIElement 函数
【发布时间】:2023-03-28 07:53:01
【问题描述】:
我正在开发一个使用媒体组件的 MVVM C# Metro 应用程序,特别是利用播放功能。
通常情况下,您似乎会绑定属性,但是我需要进行诸如MediaElement.Play(source); 之类的调用以及诸如此类的事情。到目前为止,我想出的最佳解决方案是从视图模型中触发一个事件,该事件由后面的代码处理。
这实际上是最佳做法,还是有更复杂的方法?
【问题讨论】:
标签:
c#
xaml
mvvm
windows-8
uielement
【解决方案1】:
MSDN 上有一系列有用的文章可能会帮助您以更有效的方式做到这一点:
注意:这些仍然是 .Net 4 示例,但我敢打赌,在 Windows 8 及其所有增强功能上运行它不需要太多努力。
【解决方案2】:
我曾经尝试过使用 MVVM 方式在 WPF 中制作媒体播放器,根据我的经验,我觉得以 MVVM 方式制作它会很痛苦。如果它比始终坚持使用 MVVM 更简单和更快,我建议在后面编写代码,如果您希望它看起来更干净,您可以稍后使用一些依赖属性将它作为用户控件分开。
无论如何,关于媒体播放,您可以“也”做的是在您的视图模型中保留一个媒体播放器 (Media Player),并创建一个指向该媒体播放器的视频画笔并使用它在视图中显示您的视频。可以使用矩形或您为其设置绘图笔刷的任何其他元素。
由于您的媒体播放器是视图模型,现在您可以播放、停止、搜索等
这样的,
var player = new MediaPlayer();
var myVideo = new VideoDrawing { Rect = new Rect(0, 0, 1, 1), Player = player };
var dBrush = new DrawingBrush(myVideo);
// Use drawing brush to fill a rectangle
rectangle.Fill = dBrush;