我正在使用 MVVM 工具包。 在我的 ViewModel 中,我保留了在将 ViewModel 切换到另一个时要保存的数据。
负责切换ViewModels的是ViewModelLocator:
http://simplemvvmtoolkit.codeplex.com/wikipage?title=Getting%20Started第 8 点。
ViewModelLocator 每次都返回新的 ViewModel:
public class ViewModelLocator
{
// Create ProductListViewModel on demand
public ProductListViewModel ProductListViewModel
{
get
{
IProductServiceAgent serviceAgent = new MockProductServiceAgent();
return new ProductListViewModel(serviceAgent);
}
}
}
我不想破坏 MVVM 规则。我正在考虑创建这样的新对象:
public class ViewModelLocator
{
private ProductListViewModel productListViewModel;
// Create ProductListViewModel on demand
public ProductListViewModel ProductListViewModel
{
get
{
IProductServiceAgent serviceAgent = new MockProductServiceAgent();
if (productListViewModel == null)
productListViewModel = new ProductListViewModel(serviceAgent);
return productListViewModel;
}
}
}
... 或者在切换 ViewModel 时序列化 ViewModel,在加载它时 - 反序列化...
这个问题的正确解决方案是什么?
最佳答案
我建议您为此使用任何类型的 IoC 容器(例如 Unity)
public class ViewModelLocator
{
public static UnityContainer Contaner { get; private set;}
static ViewModelLocator()
{
Container = new UnityContainer();
Container.RegisterType<ProductListViewModel>(new ContainerControlledLifetimeManager());
}
public ProductListViewModel ProductViewModel
{
get
{
return Container.Resolve<ProductListViewModel>();
}
}
}
我认为 MVVM Light Toolkit 中有 SimpleIoc - IoC 容器的轻量级实现。
关于c# - 简单的 MVVM 工具包 - 切换时丢失 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7685796/