我的 MVVM 程序是一个媒体播放器,它使用媒体元素的自然持续时间属性来设置媒体时间轴的持续时间。在我实现 MVVM 设计模式之前,我可以简单地将
MyMediaTimeline.Duration = MyMediaElement.NaturalDuration;
在代码隐藏中。我是使用 MVVM 的新手,但我认为这不是根据 MVVM 设计模式执行此操作的正确方法。我相信 MediaElement.NaturalDuration 不是依赖属性,因此不能直接绑定到。我是否需要以某种方式使其成为依赖项属性?这会在视图模型中编码吗?
当我们需要使用 MVVM 实现与 UI 控件相关的此类功能时,我们有几个选项。一种是实现某种可以为我们实现此功能的服务或管理器类,另一种是使用 Attached Properties
.在这两个选项中,我认为第二个选项更适合这个问题。
事件处理程序添加到视图背后的代码中绝对没有错,即使在使用 MVVM 时也是如此。我一直看到新用户对使用 MVVM 时该做什么而不是使用背后的代码感到恐慌。这是关于 MVVM 的常见误解。
如果你真的知道如何正确使用Attached Properties
,那么我建议你使用其中一个(或多个)来解决你的问题,否则我很乐意建议你使用后面的代码。请注意,如果视图模型已正确绑定到视图的数据,则可以从隐藏的代码访问视图模型,如下所示:
TypeOfViewModel viewModel = (TypeOfViewModel)DataContext;