ViewModel 是否应该公开诸如 BitmapImage 或 ImageSource 或音频文件缓冲区之类的内容


视图

模型应该公开加载的位图图像(BitmapImage 类),还是只提供文件名并让 WPF 控件加载图像或加载音频文件。

从视图模型在 MVVM 设计模式中的角色来看,什么是正确的。

我问这个问题的原因是,如果允许 WPF 控件从本地存储加载图像,则应用程序将很难监视正在使用哪些文件。

编辑:当应用程序管理其文件资源(WinRT 或 WindowsPhone 应用程序)时,会出现此问题。当 WPF 控件加载文件时,应用程序无法管理文件资源,并且应用程序将间接依赖于 WPF 控件的生命周期,因为在 WPF 控件释放文件之前无法删除或修改文件。

像caliburn Micro这样的框架也没有代码的概念。那么这些案件应该如何处理呢?谢谢

就个人而言,我喜欢从视图模型向图像(或资源)公开 URI。

这有助于避免坏习惯 - 当你的团队处于紧迫的时间限制下时,很容易开始让糟糕的代码(如 UI 引用)滑入不应该出现的地方。

因此,将

图像或音频文件视为资源,并为其提供 URI - 然后视图可以绑定到此资源,并以它认为合适的任何方式公开它。

视图中的代码隐藏也没有理由无法通过视图DataContext访问公开的 URI。我总是让我的视图模型实现特定于它们的接口(即 ViewModelA 将实现 IViewModelA),然后每当视图中的某些代码需要访问视图模型时,它都会通过接口完成,例如:

var myAudioUri = ((IViewModelA) DataContext).ThatAudioUri;

在我的项目中,我们在ViewModels中具有BitmapImage类型的属性。它使我们能够完全控制何时加载图像,并且还允许我们对此属性进行单元测试。

最新更新