我最近阅读了一些关于在MVVM应用程序中使用IoC的文章。 This很好的回答。我开始思考,如果我有单个View和四个ViewModel。我不知道在设计时应该将哪一个附加到View的DataContext。我会在运行时知道。
就像,在那个答案中我有定位器:
class IocConfiguration : NinjectModule
{
public override void Load()
{
Bind<IStorage>().To<Storage>().InSingletonScope();
Bind<UserControlViewModel>().ToSelf().InTransientScope().WithConstructorArguments( ... ).Named("UserControlViewModelA");
Bind<UserControlViewModel>().ToSelf().InTransientScope().WithConstructorArguments( ... ).Named("UserControlViewModelB");
Bind<UserControlViewModel>().ToSelf().InTransientScope().WithConstructorArguments( ... ).Named("UserControlViewModelC");
Bind<UserControlViewModel>().ToSelf().InTransientScope().WithConstructorArguments( ... ).Named("UserControlViewModelD");
}
}
class ViewModelLocator
{
public UserControlViewModel UserControlViewModelA
{
get { return IocKernel.Get<UserControlViewModel>("UserControlViewModelA"); }
}
public UserControlViewModel UserControlViewModelB
{
get { return IocKernel.Get<UserControlViewModel>("UserControlViewModelB"); }
}
public UserControlViewModel UserControlViewModelC
{
get { return IocKernel.Get<UserControlViewModel>("UserControlViewModelC"); }
}
public UserControlViewModel UserControlViewModelD
{
get { return IocKernel.Get<UserControlViewModel>("UserControlViewModelD"); }
}
}
我的问题是。我应该如何在我的视图中处理它?</ strong>:
<UserControl
...
DataContext="{Binding UserControlViewModelA, Source={StaticResource ViewModelLocator}}">
<Grid>
</Grid>
</UserControl>
我的意思是,我正在努力在运行时分配不同的ViewModel。设计时间不是问题。问题是我应该采取什么方法在运行时将特定ViewModel设置为此视图并保持最佳编程实践