首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态ViewModels与实例化ViewModels

静态ViewModels与实例化ViewModels
EN

Stack Overflow用户
提问于 2011-05-13 18:39:37
回答 3查看 2.8K关注 0票数 6

我有两个视图,它们共享来自特定视图模型的一个可观察集合,但具有不同的集合视图参数。在MVVM Light中实现它的正确方法是什么?是否支持非静态虚拟机?我如何管理它们的生命周期并处理它们?

EN

回答 3

Stack Overflow用户

发布于 2013-08-09 20:06:18

的确有!

默认情况下,从SimpleIoc解析的对象是单例。要解决这个问题,您需要传递一个惟一的标识符作为ServiceLocator.GetInstance方法的参数。

如下所示:

我们有两个属性返回相同的视图模型。一个返回单例,另一个每次返回一个新实例。

代码语言:javascript
复制
class ViewModelLocator
{
    static ViewModelLocator()
    {
        ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
        if (ViewModelBase.IsInDesignModeStatic)
        {
            SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
        }
        else
        {
            SimpleIoc.Default.Register<IDataService, DataService>();
        }

        SimpleIoc.Default.Register<MainViewModel>();
        SimpleIoc.Default.Register<SecondViewModel>();
    }


    public MainViewModel MainAsSingleton
    {
        get { return ServiceLocator.Current.GetInstance<MainViewModel>(); }
    }

    public MainViewModel MainAsDiffrentInstanceEachTime
    {
        get { return ServiceLocator.Current.GetInstance<MainViewModel>(Guid.NewGuid().ToString()); }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2011-06-08 04:38:33

Laurent的一些examples of MVVM Light使用带有静态ViewModel实例的ViewModelLocator (类似于单例)。请注意ICleanup接口。此外,非静态VM通常必须在视图的构造函数中进行MEFed或构造。

票数 0
EN

Stack Overflow用户

发布于 2013-08-09 16:31:56

对于ViewModels管理,通常使用IOC模式。在MVVM Light框架中,它是一个SimpleIoc实现。

我更喜欢使用Ninject - http://www.ninject.org/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5990704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档