2014-01-17 8 views
6

Win Store, WP8, iOS, Droid의 주요 제약 프로젝트에서 MvvmCross와 ReactiveUI를 비교하는 과정에 있습니다. 우리는 이미 Xamarin을 선택했습니다.ReactiveUI - 라우팅에 대해 혼동했습니다.

전 ReactiveUI를 처음 사용했습니다. 나는 원칙적으로 보는 것을 정말 좋아하고 Paul은 천재라고 생각합니다. 그러나 세부 사항은 진짜 곰이되고있다. 나는 문서를 추적하는 데 며칠을 보냈다. (매뉴얼은 2011 년부터 시작되었으며 거의 ​​완전히 구식 인 것 같다. "라우터"라는 단어도 포함되어 있지 않다.)와 샘플 코드.

ReactiveUI.Samples의 샘플을보고 있는데 또한 ReactiveUI 솔루션의 MobileSample-RT 프로젝트입니다.

나는 ReactiveUI.Samples "Routing"예제에서 내 작은 Hello World를 기반으로했습니다. 솔직히이 예제는 AppBootstrapper에서 유일한보기로 이동하는 것만 큼 많은 예제가 아닙니다. 나는 MobileSample-RT에서 "3 페이지"예제와 비슷한 것을 시도하고있다.

HostScreen.Router.NavigateCommandFor<LoginViewModel>().Execute(HostScreen); 

같은 :이하려고하면 그것은 (ReactiveUI.dll에 들어 있지 PDB 심볼)

충돌

HostScreen.Router.Navigate.Execute(RxApp.DependencyResolver.GetService(typeof(LoginViewModel))); 

: 내 프로젝트에서이 같은 시도하면 문제는, 결과 - 하드 크래시. 그것은 정말로 "단지 일해야"하는 것처럼 보이는 것처럼 나를 던졌습니다.

HostScreen.Router.Navigate.Execute(new LoginViewModel(HostScreen)); 

을 그리고 예상대로, 내보기로 이동 않습니다

나는이를 호출 할 수 있습니다. 또한 메인 화면에서 뒤로 버튼을 유선 :

this.OneWayBind(AppBootstrapper, x => x.Router.NavigateBack, x => x.BackButton.Command); 

그리고 실제로 어떤 난 그냥 탐색 줄을보기에서 뒤로 이동합니다.

이제 저는 앞으로 나아가고 싶습니다. 이 작업을 수행하는 버튼을 다시 클릭하십시오 :

HostScreen.Router.Navigate.Execute(new LoginViewModel(HostScreen)); 

그리고 그보기로 돌아갑니다. 그러나 이번에는 실제로 뒤로 이동하려면 뒤로 버튼을 두 번 클릭해야합니다. 그런 다음 다시 앞으로 이동하면 다음 번에 3 번 클릭이 발생합니다. NavigationStack은 LoginViewModel의 새로운 인스턴스를 채우고 있습니다.

그래서 라우팅/탐색을 수행하는 올바른 방법은 무엇입니까? 그 명령들이 왜 충돌하고 있습니까? Navigate.Execute에서 매번 "new"를 호출하는 대신 탐색 스택에 이미있는 뷰 모델로 이동하는 방법은 무엇입니까 (또는 맨 처음에 있어야합니까?).

제공 할 수있는 명확성에 대해 감사드립니다.

+1

pdb가로드되지 않았다고 언급했습니다. Paul은 모든 빌드를 http://www.symbolsource.org/로 푸시하며,이를 통해 reactiveui를 이해하고 학습하는 데 매우 중요하다고 생각했습니다. 비주얼 스튜디오 디버거를 구성하는 방법에 대한 지침이 사이트에 있습니다. – Gordon

답변

8

iOS 및 Android 용으로 구축하는 경우 라우팅을 사용하지 않으려는 것입니다. 즉, 플랫폼에 따라 라우팅 충돌이 너무 많다는 것입니다 (WP8에서도 스트레칭이 가능합니다. 그것을 해키하기 위해). 첫 번째보기 위치를 유지해야합니다.

그러나 Xamarin Forms를 사용하는 경우 ReactUI는 VM 기반 라우팅에서 효과적입니다 (Xamarin이 모든 해킹 작업을 수행 한 이후 가능함).

그것의 데모 https://github.com/paulcbetts/xamarinevolve2014을 확인 나는 워드 프로세서 빨아 알고 나는 새로운 일하고 있어요 :

+0

감사합니다. 폴. –

+0

@PaulBetts Xamarin.ios 및 Xamarin.Android의 라우팅을 피하는 것이 좋습니다. 우리는 MVVMCross를 사용하여 viewmodel을 통한 탐색과 ReactiveUI + Reactive 확장을 사용하여 응용 프로그램을 배관 할 생각입니다. 이 구성과 관련하여 문제가 있습니까? 또는 ReactiveUI를 사용하여 viewmodel을 통해 탐색하지 않는 방법이 있습니까? – Amnysia

관련 문제