2013-05-23 4 views
5

ShowViewModel을 호출 할 때마다 어떻게 든 ViewModel과 요청한 유형의보기가 검색되고 함께 표시되어 화면에 표시됩니다. ViewModel과 View의 새로운 인스턴스가 만들어 지거나 캐시에서 조회되거나 검색되는 경우는 언제입니까? 새 인스턴스가 항상 만들어지고 다중 인스턴스를 방지하기 위해 자체 캐시를 만드는 경우 캐시 된 ViewModel 인스턴스를 어떻게 표시합니까?MvvmCross : ShowViewModel은 항상 새 인스턴스를 생성합니까?

답변

6

ViewModel과 View의 새 인스턴스가 만들어지고 캐시에서 검색되고 검색되는 경우는 언제입니까?

절대 - 새로운 탐색의 경우 기본 동작은 항상 새 인스턴스를 만드는 것입니다.

... 캐시 된 ViewModel 인스턴스를 어떻게 표시합니까?

어떤 이유로 당신이 ViewModel에 위치/생성을 무시하려면, 다음 App.cs에서의 DefaultViewModelLocator를 오버라이드 (override)에 대한 가능한 정보가있다 :

은 간단하게 코드를 구현하십시오 :

public class MyViewModelLocator 
    : MvxDefaultViewModelLocator 
{ 
    public override bool TryLoad(Type viewModelType, IDictionary<string, string> parameterValueLookup, 
          out IMvxViewModel model) 
    { 
     // your implementation 
    } 
} 

다음 App.cs에 반환 : How to replace MvxDefaultViewModelLocator in MVVMCross application 같은 이전 게시물이 여전히 개념적으로 호환되는지

protected override IMvxViewModelLocator CreateDefaultViewModelLocator() 
{ 
    return new MyViewModelLocator(); 
} 

주 - 그러나 그 이전 게시물의 세부 사항이 잘못되었습니다. 인터페이스 "ICacheableViewModel"를 만들기

protected override IMvxViewModelLocator CreateDefaultViewModelLocator(){ 
return new CacheableViewModelLocator();} 

와 뷰 모델에 구현 :이 메소드를 오버라이드 (override) 귀하의 응용 프로그램 코드에

public class CacheableViewModelLocator : MvxDefaultViewModelLocator{ 
public override IMvxViewModel Load(Type viewModelType, IMvxBundle parameterValues, IMvxBundle savedState) 
{ 
    if (viewModelType.GetInterfaces().Any(x=>x == typeof(ICacheableViewModel))) 
    { 
     var cache = Mvx.Resolve<IMvxMultipleViewModelCache>(); 
     var cachedViewModel = cache.GetAndClear(viewModelType); 

     if (cachedViewModel == null) 
      cachedViewModel = base.Load(viewModelType, parameterValues, savedState); 

     cache.Cache(cachedViewModel); 

     return cachedViewModel; 
    } 

    return base.Load(viewModelType, parameterValues, savedState); 
}} 

:이 클래스를 사용할 수 있습니다 MvvmCross의 V3.5에서

+0

내 WP8 장치와 'MvvmCross v3'을 사용한 나의 경험에서 각 탐색 (신규 또는 신규)은 ViewModel에 대해 새로운'ctor'를 생성한다는 것을 주목하십시오. 나는'N-05-MultiPage' 튜토리얼 코드로 같은 동작을 확인했다. 자세한 내용은 [this] (http://stackoverflow.com/questions/16873710/viewmodels-constructor-is-being-called-again-on-navigation-and-so-messenger-su)를 참조하십시오. – Liel

3

.

이제 동일한 ViewModel 인스턴스를 여러보기와 공유 할 수 있습니다.

관련 문제