ViewModel应该公开BitmapImage或ImageSource或音频文件缓冲区之类的东西吗?

时间:2013-12-21 11:58:31

标签: c# wpf mvvm caliburn.micro

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

View Model在MVVM设计模式中的作用是正确的。

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

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

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

2 个答案:

答案 0 :(得分:1)

在我的项目中,我们的ViewModel中有BitmapImage类型的属性。它使我们可以完全控制何时加载图像,并且它还允许我们对这些属性进行单元测试。

答案 1 :(得分:1)

我个人喜欢只从视图模型中将URI暴露给图像(或资源)。

这有助于避免不良习惯 - 当您的团队受到严格的时间限制时,很容易开始让错误的代码(例如UI引用)滑入他们不应该的地方。

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

也没有理由认为视图中的代码无法通过视图的DataContext访问公开的URI。我总是让我的viewmodel实现一个特定于它们的接口(即ViewModelA将实现IViewModelA),然后每当视图中的某些代码需要访问viewmodel它通过接口执行它时,例如:

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