PRISM INavigationService
이 Xamarin Forms에서 제공하는 Navigation.PushAsync
표준에 매핑되는 방식을 이해하는 데 어려움을 겪고 있습니다.PRISM Xamarin.Forms INavigationService 이해
XF를 사용하기 시작한 응용 프로그램이 있습니다. 홈 페이지 인 MasterDetailPage
과 다른 기능으로 이동하는 데 사용되는 여러 개의 버튼이 포함 된 "Detail"ContentPage
으로 구성됩니다. App.xaml.cs 내에서 Application.MainPage를 NavigationPage "MainPage = new NavigationPage(new HomePage())
"내에 래핑 된 내 홈 페이지의 인스턴스로 설정합니다. 기능 페이지를 표시하려면 "Navigation.PushAsync(new NewPage())
"을 호출하면 새 페이지가 뒤로 단추가있는 도구 모음과 함께 표시됩니다. 그런 다음 장치의 뒤로 단추 나 도구 모음의 뒤로 단추를 사용하여 내 홈 페이지로 돌아갈 수 있습니다. 응용 프로그램이 Android에서 실행 중입니다.
그런 다음 PRISM.Forms를 통합하여 보았습니다. 저는 수년 동안 WPF 용 PRISM을 사용해 왔기 때문에 이것을 사용하고 싶었습니다. 최신 버전 (6.3)을 사용하고 있습니다.
는 내가 "PRISM 템플릿"을 기반으로 새로운 응용 프로그램을 만든 다음 '앱'클래스는 이제 "PrismApplication"의 해제를 기반으로- 기존 프로젝트에 차이 ... 대신 복제 "PrismApplication.RegisterTypes"내가
- 내가 전화 "PrismApplication.OnInitialized"의 말을 탐색 할 수 에 원하는 형태의 모든 "Container.RegisterForNavigation"전화
- "내"응용 프로그램 " INavigationService.NavigateAsync ($ "/ {nameof (NavigationPage)}/{nameof (HomeMasterDetailPage)} ");" 내가 이전에 "Navigation.PushAsync"라고
- , 내가 는 "INavigationService.NavigateAsync (nameof (NEWPAGE가))" "MainActivity"내 내가
지금까지 그렇게 좋았습니다. 내 홈페이지가 예상대로 표시됩니다. 그러나 "NewPage"로 이동하면 도구 모음에 뒤로 버튼이 없습니다 (아직 "hamburger"메뉴가 MasterDetailPage
에서 있지만). 다시 버튼을 사용하면 운영 체제로 돌아갑니다. 페이지가 새로운 하위 페이지로 탐색하는 대신 MasterDetailPage의 "Content"섹션으로 삽입 된 것으로 보입니다.
이것은 의도적으로 설계된 것이 아니므로 오해의 소지가 있다고 생각합니다. 그렇지 않으면 누군가가 올바른 방향으로 나를 가리킬 수 있습니다. 그렇지 않으면 필자는 프리즘을 버리고 대안을보아야 할 것이라고 생각합니다.
믹스에 로그인 화면을 도입 할 때도 문제가 있습니다. 먼저 "INavigationService.NavigateAsync($"/{nameof(NavigationPage)}/{nameof(LoginPage)}");
"으로 전화를 시작한 다음 로그인이 성공하면 "INavigationService.NavigateAsync($"/{nameof(NavigationPage)}/{nameof(HomeMasterDetailPage)}");
"을 호출하여 홈페이지로 이동합니다. 여기서 문제는 홈 페이지 (MasterDetailPage
)를 표시 할 때 페이지의 "마스터"부분을 여는 "햄버거"버튼이 더 이상 보이지 않는다는 것입니다. 나는 이것이 아마도 또한 INavigationService
을 사용하는 것과 관련이 있다고 생각하지만 그렇지 않은 경우에는 별개의 문제로 제기 할 수 있습니다.
고마워, 그게 내가 기대했던 방식이지만, 슬프게도 내가 원하는 방식으로 행동하게 만들 수는 없어. 문제는 내가 MasterDetailPage를 사용할 때 INavigationService가 PushAsync를 호출하는 대신 "Detail"페이지를 설정한다는 것입니다 (나는 이것을 어딘가에 읽었지만 지금은 찾을 수 없다). 이 기능을 재정의 할 수 있다면 내 문제가 해결 될 것이라고 생각합니다. –
참조한 샘플을 검토 한 결과 내 시나리오와 일치하는 것을 찾을 수 없습니다. 내가 달성하고자하는 것은 MasterDetailPage.Content가 주 메뉴로 사용되는데, 여기에서 항목을 두드리는 것은 PushAsync (현재 "Detail"페이지를 대체하는 대신)를 사용하여 새 페이지로 이동하는 반면 "Master"는 추가 메뉴입니다. 옵션은 기본 메뉴가 표시된 경우에만 사용할 수 있습니다. 메뉴에서 열린 모든 페이지에는 MasterDetailPage의 햄버거 메뉴가 아닌 뒤로 버튼이 표시됩니다. –
확인. 무슨 일이 일어나고 있는지 발견했다. 내가 MasterDetailPage에서 탐색 중이기 때문에 INavigationService.NavigateAsync가 PageNavigationService.ProcessNavigationForMasterDetailPage (https://github.com/PrismLibrary/Prism/blob/master/Source/Xamarin/Prism.Forms/Navigation/PageNavigationService.cs#L298)를 호출하고 있습니다. useModalNavigation "매개 변수 값에 따라 PushModalAsync (DoPush를 통해)를 호출하거나 현재"세부 정보 "페이지를 대체합니다. 코드 내에서 매개 변수를 사용하여 동작을 변경할 수있는 것은 아무것도 없습니다. –