Navigate.Page를 열 때 Paramater 값을 넘겨주는 방법이 궁금합니다.
Page
는Paramater
값에 따라 UI가 랜더링 된다.
Binding
된 값에 따라 타이틀 이름과 보여줄 이미지가 결정되는 구조입니다.
즉 하나의 페이지에서Parameter
값에 따라 보여지는 것들??이 다릅니다.- 페이지가 랜더링 되기 전에
Parameter
값으로 셋팅되어야 하는 구조입니다.
설명?
MAUI
마이그레이션 진행 중이며 Xamarin
에서는 다음과 같이 동작합니다.
// Page 열기 및 Parameter 값 넘겨주기
PageParameter parameter = new PageParameter(title, TitleKey); // parameter 생성
return NavigateAsync<PageViewModel, PageParameter>(parameter); // parameter 전달 및 Page 열기
// Page 초기화 되는 곳??
MvxViewModel - Prepare
// Prepare를 통해 UI가 구성 되기전?에 parameter 값으로 초기화 합니다
MvvmCross
기능으로 Parameter
값을 넘겨주고 Prepare
이벤트?로 Page의 속성을 초기화 한다음에 페이지를 여는 구조 였습니다.
MAUI로 넘어오면서 MvvmCross
사용이 불가능하여 다음과 같은 기능을 사용해 보았습니다.
MAUI 기본 기능 Pass data
링크
// MAUI 기본 기능 `pass data` 예제
var navigationParameter = new Dictionary<string, object>
{
{ "Bear", animal }
};
await Shell.Current.GoToAsync($"beardetails", navigationParameter);
URI
베이스로 Parameter
값이 정상적으로 넘어가긴 합니다.
UI 랜더링
이 끝나고 나서(Page가 열리고 나서) Parameter
값이 들어오기 때문에 문제가 생깁니다.
이미 UI에 대한 판별이 끝나서 Parameter
값이 없다는 페이지가 생성됩니다.
( 마치 DataSelector
??처럼 Paramter
값이 있는 것과 없을 때 생성 되는 페이지가 다릅니다…)
결론?? 원하는 동작
-
Page에 Data를 전달해야한다.
-
Page가 랜더링 되기전에
Data
값으로 속성들을 초기화 해줘야한다. -
또는
ViewModel
의 속성을 미리 초기화해서 페이지를 여는 방법…
이 방법 같은 경우에는 예제와 같이ViewModel
에서 페이지를 여는 코드가 들어가며Page
에 대한 참조를 없애기 위해Key
값,
그러니까String
데이터를 주면 등록된Route
를 통해 페이지가 열리는 방식이라 ;;;
속성이 초기화 된ViewModel을 Page
를 줄 수 있는지 모르겠네요;;
정리하자면 MVVM 패턴을 준수하면서 미리 초기화해서 보내는 방법을 모르겠습니다.