可以将视图模型声明为视图中的静态资源吗?
问题描述:
编写MVVM WPF应用程序时,视图模型必须设置为视图的数据上下文。对我来说,通常是在代码中。但是我意识到,如果我将视图模型声明为xaml内部的静态资源并在其中设置绑定,则不需要在代码中执行此操作。这意味着我不必在第三个类的某个地方协调视图和视图模型,就像在App中一样。可以将视图模型声明为视图中的静态资源吗?
这样做可以接受吗?
谢谢!
答
我会这么说。它意味着View的ViewModel具体的知识,但你必须设置它,我喜欢这里的codebehindless方法。
如果你正在使用依赖注入这不合适,但如果你不是,我会坚持这种方法。
答
可以接受,是的,但是如果您使用PRISM或任何类型的DI,那么从容器中解析它,然后使用代码或使用标记扩展来设置datacontext会更有意义,具体取决于你的确切解决方案
答
如果你想在查看-First方法使用依赖注入(DI)尽量视图模型定位模式:
public static class ViewModelLocator
{
public static MainWindowViewModel MainWindowViewModel
{
get
{
return ObjectFactory.GetInstance<MainWindowViewModel>();
}
}
};
和WPF代码:
<Window
...
DataContext="{x:Static Services:ViewModelLocator.MainWindowViewModel}"
>
我不知道是什么依赖注入是的,所以我想我没有使用它:) – djcouchycouch 2009-07-24 15:58:31
如果你在做MVVM,你可能想要调查它。如果你的项目有任何规模,我也建议看看(正如史蒂夫罗宾斯正确提到的)棱镜。这是DI的一个非常好的应用。有几件事让MVVM变得更容易一些。如果您至少没有使用mvvmfoundation.codeplex.com,那么您的工作太辛苦:) – 2009-07-24 16:13:17