Статические ViewModels против инстансированных ViewModels - PullRequest
6 голосов
/ 13 мая 2011

У меня есть два представления, которые совместно используют одну наблюдаемую коллекцию из определенной модели представления, но с другими параметрами представления коллекции.Как правильно реализовать это в MVVM Light?Есть ли поддержка нестатических виртуальных машин?Как я могу управлять их жизнью и распоряжаться ими?

Ответы [ 3 ]

1 голос
/ 09 августа 2013

Есть!

По умолчанию объекты, разрешенные из SimpleIoc, являются одиночными. Чтобы обойти это, вам нужно передать уникальный идентификатор в качестве параметра метода ServiceLocator.GetInstance.

См. Ниже:

У нас есть два свойства, возвращающие одну и ту же модель представления. Один возвращает синглтон, а другой каждый раз возвращает новый экземпляр.

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()); }
    }
}
0 голосов
/ 09 августа 2013

Для управления ViewModels обычно используют шаблон IOC.В MVVM Light Framework это реализация SimpleIoc.

Я предпочитаю использовать Ninject - http://www.ninject.org/

0 голосов
/ 08 июня 2011

Некоторые из примеров MVVM Light от Лорана используют ViewModelLocator со статическими экземплярами ViewModel (синглтоноподобными). Обратите внимание на интерфейс ICleanup. Кроме того, нестатические виртуальные машины обычно должны быть встроены в MEF или созданы в конструкторе View.

...