ShowViewModel을 호출 할 때마다 어떻게 든 ViewModel과 요청한 유형의보기가 검색되고 함께 표시되어 화면에 표시됩니다. ViewModel과 View의 새로운 인스턴스가 만들어 지거나 캐시에서 조회되거나 검색되는 경우는 언제입니까? 새 인스턴스가 항상 만들어지고 다중 인스턴스를 방지하기 위해 자체 캐시를 만드는 경우 캐시 된 ViewModel 인스턴스를 어떻게 표시합니까?MvvmCross : ShowViewModel은 항상 새 인스턴스를 생성합니까?
5
A
답변
6
ViewModel과 View의 새 인스턴스가 만들어지고 캐시에서 검색되고 검색되는 경우는 언제입니까?
절대 - 새로운 탐색의 경우 기본 동작은 항상 새 인스턴스를 만드는 것입니다.
... 캐시 된 ViewModel 인스턴스를 어떻게 표시합니까?
어떤 이유로 당신이 ViewModel에 위치/생성을 무시하려면, 다음 App.cs
에서의 DefaultViewModelLocator를 오버라이드 (override)에 대한 가능한 정보가있다 :
- MVVMCross Passing values to ViewModel that has 2 constructors
- http://slodge.blogspot.co.uk/2013/01/navigating-between-viewmodels-by-more.html
은 간단하게 코드를 구현하십시오 :
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에서
3
.
이제 동일한 ViewModel 인스턴스를 여러보기와 공유 할 수 있습니다.
관련 문제
- 1. lambda는 호출 될 때마다 새 인스턴스를 생성합니까?
- 2. PetaPoco GetInstance()는 항상 새 인스턴스를 반환합니까?
- 3. 히스토리가없는 새 활동 인스턴스를 항상 시작하십시오.
- 4. Java는 호출 될 때마다 iterator()의 새 인스턴스를 생성합니까?
- 5. stringWithFormat이 보유 +1 인스턴스를 생성합니까?
- 6. LoadLibrary가 고유 한 인스턴스를 생성합니까?
- 7. StandardWrapperValve는 서블릿의 새로운 인스턴스를 생성합니까?
- 8. NSOperation이 새 스레드를 생성합니까?
- 9. EJB가 새 트랜잭션을 생성합니까?
- 10. MVVMCross
- 11. 프로그램에서 항상 동일한 값을 생성합니까?
- 12. 열린 InputStream이 항상 누수를 생성합니까?
- 13. prepareForSegue ** 항상 ** 새로운 destinationViewController를 생성합니까?
- 14. 항상 클래스의 인스턴스를 만드시겠습니까?
- 15. UWP App 동적 피벗 MVVM 항상 viewmodel의 새 인스턴스를 만듭니다.
- 16. 왜 __slots__ = ('__dict__',) 작은 인스턴스를 생성합니까?
- 17. htmlunit은 실행중인 컴퓨터에 브라우저 인스턴스를 생성합니까?
- 18. 이 코드는 함수의 여러 인스턴스를 생성합니까?
- 19. C#은 어떻게 클래스의 인스턴스를 생성합니까?
- 20. JAVA의 정적 메서드가 단일 인스턴스를 생성합니까?
- 21. 스레드가 정적 변수의 여러 인스턴스를 생성합니까
- 22. IntelliJ 어떻게 새 클래스를 생성합니까?
- 23. CRM CrmConnection의 새 인스턴스를 만듭니다.
- 24. AppEngine은 필요없는 새 인스턴스를 시작합니다.
- 25. 어떻게 새 인스턴스를 만들
- 26. 새 인스턴스를 사용하여 인스턴스를 직접 교체하는 경우
- 27. 스키마를 추가하거나 새 인스턴스를 만드시겠습니까?
- 28. 항상 같은 인스턴스를 반환하는 클래스
- 29. Thread.CurrentThread는 항상 같은 인스턴스를 반환합니까?
- 30. 부두 6은 항상 디버그 로그를 생성합니까?
내 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