2016-06-10 1 views
0

MvvmCross 3.5.1을 사용하여 Win 8.1 응용 프로그램을 개발합니다. 사용자는 일부보기를 순차적으로 거쳐 마지막보기의 첫 번째보기로 돌아갑니다. 모든 것이 워크 플로의 첫 번째 반복 과정에서 완벽하게 작동합니다. 그러나 사용자가 워크 플로를 다시 시작하면 viewmodels의 Init() 메서드가 호출되지 않습니다.ViewModel을 다시 탐색 할 때 Init() 메서드가 호출되지 않는 이유는 무엇입니까?

예를 들어 FirstViewModel과 SecondViewModel 간의 상호 작용은 다음과 같습니다.

FirstViewModel :

ShowViewModel<SecondViewModel>(
    new 
    { 
     code = ItemCode, 
     descr = ItemDescription 
    }); 

SecondViewModel :

public void Init(string code, string descr) 
{ 
    ... 
} 

그래서 간단하지만 작동 한 번만 이유가 그런 행동을 수반 할 수있다 무엇 :(


로 w orkaround 나는 "수동"뷰 모델로드 시도 :

var d = new Dictionary<string, string> 
{ 
    {"code", ItemCode}, 
    {"descr", ItemDescription} 
}; 

var b = new MvxBundle(d); 

var r = new MvxViewModelRequest<SecondViewModel>(b, null, null); 

var m = Mvx.Resolve<IMvxViewModelLoader>().LoadViewModel(r, null); 

그것은() 메소드 호출 초기화와 함께 문제를 해결했다. 하지만 m 변수를 사용하여 뷰 모델을 표시하는 방법을 모르겠습니다. 누구?


불쌍한 영어에 대한 사과와 미리 감사드립니다.

+0

내가 mvvmcross 모르는,하지만 난 당신이 "로드"방법 또는 "로드 검색하는 생각 것 "이벤트. – Kilazur

+0

보기를 명시 적으로 삭제하지 않는 한 가능성이 높습니다. 반환 된 사진은 다시 초기화되지 않고 초기화되었을 때 메모리에서 다시 당겨집니다. –

+0

이 게시물은 당신에게 흥미로울 것입니다. http://stackoverflow.com/questions/17857543/mvvmcross-viewmodel-caching-and-re-initializing – momar

답변

1

Init()은 Windows 8.1 앱에서 페이지를 캐시하기 때문에 한 번만 호출됩니다. 따라서 해당 페이지의 ViewModel은 파기되지 않으므로 Init() 메서드가 다시 호출되지 않습니다.

당신은 OnNavigatedTo 오버라이드 (override)하여이 동작을 우선 자신의베이스 페이지 수 :

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    if (e.NavigationMode == NavigationMode.New) 
     ViewModel = null; 

    base.OnNavigatedTo(e); 
} 
+1

코드 예제의 4 번 행은 세미콜론으로 끝나야합니다. 수정 사항은 6 자 이상 변경해야하므로 답변을 수정할 수 없습니다. –

+0

고마워요 Cheesebaron! 그것은 내 문제를 해결했다. 다른 종류의 오류가 발생하기 시작했지만 Init()의 주된 문제가 해결되었습니다. –

관련 문제