특정 viewmodel에서 하나의 observable 컬렉션을 공유하지만 컬렉션 뷰 매개 변수가 다른 두 개의 뷰가 있습니다. MVVM Light에서 구현하는 올바른 방법은 무엇입니까? 비 정적 VM을 지원합니까? 어떻게 그들의 평생을 관리하고 처분 할 수 있습니까?정적 ViewModels과 인스턴스화 된 ViewModels
6
A
답변
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()); }
}
}
Unity 또는 MEF와 같은 DI 컨테이너를 사용하고 있습니까? – PVitt
아니요, 기본 MVVM Light 템플릿을 사용합니다. –