3

我正在使用 MVVM 工具包。在我的 ViewModel 中,我保留了在将 ViewModel 切换到另一个时要保存的数据。

负责切换 ViewModel 的是 ViewModelLocator:

http://simplemvvmtoolkit.codeplex.com/wikipage?title=Getting%20开始点 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 时,在将其加载回来时 - 反序列化...

这个问题的正确解决方案是什么?

4

1 回答 1

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 容器的轻量级实现。

于 2012-03-28T16:47:44.057 回答