Простой MVVM Toolkit - потеря ViewModel при переключении их
Я использую MVVM Toolkit. В моих ViewModels я храню данные, которые я хотел бы сохранить при переключении ViewModel на другую.
Ответственным за переключение ViewModels является ViewModelLocator:
http://simplemvvmtoolkit.codeplex.com/wikipage?title=Getting%20Started point 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, при загрузке его обратно - десериализовать...
Каково правильное решение этой проблемы?
1 ответ
Я рекомендую вам использовать для этого любой тип контейнера 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.