2017-12-04 13 views
-1

Navigation.PushAsync을 사용하여 새 페이지를 탐색하고 작업이 완료되면 PopAsync을 호출하여 이전 페이지로 돌아갑니다. 문제는 첫 번째 페이지가 팝하려면 새 페이지를 기다린 다음 작업을 계속해야한다는 것입니다. 그래서 나는이 같은 일을 해요 : 나는 새 페이지가 표시 될 때 DoOtherWork 부분이 바로 실행되는 것을 관찰PushAsync가 실행되지 않고 대기 함

// source page: 
DoWork(); 
await Navigation.PushAsync(new TargetPage()); <== this does not wait for the page!?? 
DoOtherWork(); 

,이 기각되지 때까지. 하지만 여기서는 await을 사용하고 있습니다. 비동기 작업이 끝나면 나중 부분이 계속되어야 함을 의미합니다. 맞습니까? 탐색 작업을 기다리지 않고 실행되는 이유는 무엇입니까?

+0

에 동일한 메시지에 가입? 당신은 후자를 추측하고 있습니다. 그러나 당신의 가정은 맞습니까? 당신이 묘사 한 바에 따르면, 저는 전자가 그럴 것이라고 기대하고 있습니다. – Fildor

+0

작업은 해지를 기다리지 않고 페이지 표시 만 관리한다는 의미입니까? 그런 다음 탐색이 두 페이지를 어떻게 연결할 수 있습니까? – fluter

+0

여기에있는 예제를 참조하십시오 : https://developer.xamarin.com/api/member/Xamarin.Forms.INavigation.PushAsync/p/Xamarin.Forms.Page/ 해고를 기다리는 동안 Pop을 기다려야 할 것 같습니다. Return의 문서 텍스트는 약간 혼란 스럽습니다. 그 모범을 모순되는 것 같습니까? 어쩌면 그것은 나 일 뿐이에요. – Fildor

답변

3
await Navigation.PushAsync(new TargetPage()); 

이 코드는 "TargetPage"가 시각화 될 때까지 "대기"하고 코드는 "OnOtherCode"로 계속됩니다.

TargetPage가 닫힌 후 일부 코드를 실행하려면 Navigation.PopAsync 또는 "TargetPage 's OnDisappearing"이벤트 뒤에이 코드를 추가해야합니다.

또 다른 해결책은 될 수 있습니다 때 해제 할 새 페이지가 표시 될 때 작업이 완료되어 또는 "TargetPage의 OnDisappearing"이벤트에 MessagingCenter.Send를 사용하여 호출 페이지

+0

알았어. 그러나 DoOtherWork는 원본 페이지의 데이터에 액세스해야하므로 대상 페이지의 팝업 이후가 아니라 밀어 넣기를 수행하는 이유입니다. – fluter

+0

원본 페이지가 "TargetPage"또는 "CallerPage"입니까? –

+0

Source는'PushAsync'를 호출하는 첫 번째 페이지이고, target은 자체를 닫는'PopAsync'를 호출하는 두 번째 페이지입니다. – fluter