Простой MVVM Toolkit - потеря ViewModel при переключении их - PullRequest
3 голосов
/ 07 октября 2011

Я использую 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 Ответ

1 голос
/ 28 марта 2012

Я рекомендую вам использовать для этого любой тип контейнера 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.

...