2011-05-13 1 views
6

특정 viewmodel에서 하나의 observable 컬렉션을 공유하지만 컬렉션 뷰 매개 변수가 다른 두 개의 뷰가 있습니다. MVVM Light에서 구현하는 올바른 방법은 무엇입니까? 비 정적 VM을 지원합니까? 어떻게 그들의 평생을 관리하고 처분 할 수 있습니까?정적 ViewModels과 인스턴스화 된 ViewModels

+0

Unity 또는 MEF와 같은 DI 컨테이너를 사용하고 있습니까? – PVitt

+0

아니요, 기본 MVVM Light 템플릿을 사용합니다. –

답변

0

Laurent의 examples of MVVM Light 중 일부는 정적 ViewModel 인스턴스 (싱글 톤 모양)와 함께 ViewModelLocator를 사용합니다. ICleanup 인터페이스에 유의하십시오. 또한 비 정적 VM은 일반적으로 View 생성자에 MEFed하거나 생성해야합니다.

0

ViewModels 관리의 경우 일반적으로 IOC 패턴을 사용합니다. MVVM Light 프레임 워크에서는 SimpleIoc 구현입니다.

내가 Ninject에를 사용하는 것을 선호 -이 http://www.ninject.org/

1

!

기본적으로 SimpleIoc에서 해결 된 객체는 싱글 톤입니다. 이 문제를 해결하려면 ServiceLocator.GetInstance 메서드의 매개 변수로 고유 한 식별자를 전달해야합니다.

아래 참조 :

같은 viewmodel을 반환하는 두 가지 속성이 있습니다. 하나는 싱글 톤을 반환하고 다른 하나는 매번 새로운 인스턴스를 반환합니다.

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()); } 
    } 
}