模型应该公开加载的位图图像(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类型的属性。它使我们能够完全控制何时加载图像,并且还允许我们对此属性进行单元测试。