我使用的是一个非常大的软件,其中包含超过100个对话框。我们正在考虑MVVM,但是我只是读了一个老文章,指出“在调用Cleaup之前,所有ViewModel都保留在内存中”。
所以我的问题是:
该文章是Abkürzung zum ViewModel。抱歉,这是2008年的德语版本,您需要注册才能阅读。但是我的问题只是关于该陈述,因此您可以忽略它。
我读过this question,它提供的信息非常丰富,但是我并没有真正找到问题的答案。
最佳答案
这是通过拼合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
}
}
除非或放在其中,否则在该类内创建任何 View 模型是没有魔术的。默认情况下,包含一个
ServiceLocator
,您可以将其删除并替换为您选择的任何DI容器,或者手动实例化此ViewModelLocator
处理的ViewModel。默认情况下,
static Cleanup()
是而不是,您必须将调用放置在任何需要的地方,以便随时随地调用它。如果根本需要,那完全取决于您。结论:取决于
ViewModelLocator
如何操作和表现要回答您的问题:
不,除非您编写将这样做的代码
(看上面)
关于c# - MVVM中的ViewModelLocator是否为每个ViewModel在内存中保存实例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45877297/