我在一个非常大的软件上工作,有超过100个对话框。我们正在考虑使用MVVM光,但我只是阅读了一个古老的artikle,其中指出"所有ViewModel都保留在内存中,直到调用cleaup"。 所以我的问题:
文章是Abkürzung zum ViewModel。对不起,但是从2008年开始,用德语,你需要注册阅读。但我的问题只是关于那个陈述,所以你可以忽略它。
我看过this question,信息非常丰富,但我没有真正找到问题的答案。
答案 0 :(得分:1)
这是由 nugetting ViewModelLocator
包创建的默认mvvmlight
类。
public class ViewModelLocator
{
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
////if (ViewModelBase.IsInDesignModeStatic)
////{
//// // Create design time view services and models
//// SimpleIoc.Default.Register<IDataService, DesignDataService>();
////}
////else
////{
//// // Create run time view services and models
//// SimpleIoc.Default.Register<IDataService, DataService>();
////}
SimpleIoc.Default.Register<MainViewModel>();
}
public MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>();
}
}
public static void Cleanup()
{
// TODO Clear the ViewModels
}
}
除非你将它放在那里,否则没有魔法在该类中创建任何视图模型。默认情况下会涉及ServiceLocator
,您可以删除并替换您选择的任何DI容器,也可以手动执行此ViewModelLocator
处理的ViewModel实例化。
默认情况下,static Cleanup()
未被调用,您必须随时拨打电话,以便随时拨打电话。如果需要的话,这完全取决于你。
结论:ViewModelLocator
将如何运作和行为取决于您
回答你的问题:
- 这是否意味着在加载时它会在程序中加载所有 ViewModels?
不,除非你编写代码才会这样做
- 如果是默认加载全部,我可以将其更改为仅在打开对话框时加载/实例化ViewModels吗?
(见上文)