c# - 简单的 MVVM 工具包 - 切换时丢失 ViewModel

标签 c# mvvm viewmodel viewmodellocator

我正在使用 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/

相关文章:

c# - 带有另一个 ViewModel 集合的 ViewModel - AutoMapper 可以帮助我吗?

c# - DDD : Trying to code sorting and filtering as it pertains to Poco, 使用 C# 的存储库、DTO 和 DAO?

c# - 如何增加长时间运行的查询的 executionTimeout?

c# - 在代码完成执行之前动态更新 WPF 窗口

c# - 如何动态创建功能区选项卡?

silverlight - MVVM light-如何在其他 View 模型中访问属性

asp.net - 如何将我的模型数据(列表)与另一个 View 模型数据(列表)映射 MVC asp.net

android - ViewModel绝不应该引用 View 。如果这样做,则会导致内存泄漏。如何不违反这一规则?

c# - 变量如何存储在类中及其执行流程?

c# - 如何计算数据库中列的字符长度并将它们放入 datagridview 中显示的新列中