我正在WPF使用MVVM框架构建一个程序,以及Ninjectfor Dependancy Injection. 我创建了两个项目,一个.Net Class Library用于其他.Net应用程序的核心项目和一个WPF特定的应用程序。
目前,我正在使用ApplicationViewModel带有Property CurrentPage. CurrentPage是一种Enum称为ApplicationPage包含我的应用程序中不同页面的类型。在我的WPF应用程序的主窗口是一个框架,其Content是bound到CurrentPage Property并使用值转换器值转换为不同的CustomPages我已经使用switchstatment,就像这样:
if (value is ApplicationPage)
switch ((ApplicationPage)value)
{
case ApplicationPage.PageOne:
return new PageOne();
case ApplicationPage.PageTwo:
return new PageTwo();
default:
throw Exception;
}
}
我想使用Constructor Injection将View Models这些页面的传递到Page's Constructor中Converter,使用ViewModels它依次Injected进入ApplicationViewModel类,有点像这样:
case ApplicationPage.PageOne:
return new PageOne(PageOneViewModel);
我首先想到的是,有没有作出一些方式CurrentPage Property实际上是一个特定的ViewModel和执行switch上ViewModel,因此Converter将一ViewModel到Page?
然而Type ofCurrentPage是一个问题,因为它必须设置为其中之一ViewModels,因此不能采用不同的值ViewModel,让您只能使用一个ViewModel Class。
我的想法是:有没有办法传递ViewModel给Converter?或者我可以设置CurrentPage为IViewModelFactory并ViewModel在工厂的转换器内创建吗?在这种情况下,我将如何更改 的值CurrentPage以更改应用程序中的页面?
有没有办法Dependency Injection在遵循这个逻辑的同时坚持下去,或者有另一种方法,我是否需要重新考虑我的页面更改代码?不幸的是,我见过的大多数例子都陷入了所谓的ServiceLocator反模式。
相关分类