2014-10-03 27 views
0
  • MVVMCross
  • Windows應用商店
  • 的Android

我有一個虛擬機是通過從瀏覽-兒童VM鏈傳回值對來電者

瀏覽層次結構(BrowseVm),並支持前進導航
ShowViewModel<LeafDetailVM> 

葉子細節ViewModel(LeafDetailVM)。

當用戶在LeafDetail視圖上時,他們應該能夠說出「我想要這個」,然後他們將返回到發起BrowseVm的視圖。

我不能簡單地向前導航到發起者,因爲這會給我留下一個無效的回棧。我不能將BrowseVM視圖作爲NoHistory頁面,因爲我需要它位於後端堆棧中以支持從LeafDetail視圖返回。

我的計劃是讓發起人啓動帶有GUID的BrowseVm。 BrowseVm會將該GUID傳遞到LeafDetailVM上。

在「我想要這個」命令中,我將引發包含GUID的MessageVM和發起者都訂閱的消息。然後我將關閉LeafDetailVM。

當BrowseVM接收到消息通知時,它會比較GUID,如果它匹配,它將自動關閉。

當發起者收到通知時,它將處理現在選擇的數據。

這是否有意義?我錯過了一個更簡單的方法嗎?

這與How to pass a parameter from a viewmodel to its parent viewmodel類似,但不涉及退棧。

感謝

+0

這是任何使用 - http://www.gregshackles。com/2012/11/returns-results-from-view-models-in-mvvmcross /? – Stuart 2014-10-07 14:22:01

+0

我發現的問題是,我打開Browse和Detail活動。試圖關閉這兩個立即,一旦做出選擇,是一個問題。這是最重要的活動等於什麼。我得出的結論是我的瀏覽和細節UI應該使用Fragments(Android)和UserControls(Windows)來完成。完成此操作後,我將更新此問題 – 2014-10-07 15:10:24

回答

0

我建議你嘗試停止精神上耦合意見的平臺,以視圖模型上是如何工作的。

利用MvvmCross中的自定義展示器機制,在應用程序(平臺特定代碼)中,您可以以不同的方式處理導航到特定的視圖模型,包括關閉視圖,修改後臺堆棧等。 您可以將導航解釋爲以您想要的任何方式查看模型。

例如,您可以從View-Model傳遞ShowViewModel請求中的一些參數,View-Presenter(IMvxViewPresenter)可以在Show()中以不同方式解釋顯示視圖模型。

對於您的情況,您實際上可以導航到啓動器VM並通過選定的信息。在視圖展示器中,您可以按照需要的方式修改後臺堆棧。 在Android上,請確保您閱讀並瞭解所有LaunchMode標誌,例如LaunchMode.SingleTask,它允許您將啓動器活動置於前面而不創建新標誌。

我不清楚,BrowseVm是LeafDetailVM的父視圖模型嗎? 需要更多信息才能準確理解您的場景。

+0

我已經有一個CustomPresenter並使用它來支持註銷並顯示登錄頁面。請參閱https://stackoverflow.com/questions/25524972/android-activity-is-not-displayed-after-previously-shown-with-activityflags-newt。但是,當我想清除背面堆棧中的所有內容時,並不是那種正確的解決方案,而不是簡單地返回一個步驟。我也不想去一個新的啓動虛擬機實例。然而,我會再看看Android標誌。我將在BrowseVM上添加更多信息 – 2014-10-03 16:02:50

+0

「您可以以任何您想要的方式將導航解釋爲視圖模型」我從來沒有感覺到ActivityFlags曾經如此的fre as以至於讓我做我想做的任何事情:-) – 2014-10-03 16:09:50

+0

「我建議你試着停止在視覺模型上將視圖在平臺上的工作原理聯繫起來。」我這個方法完全脫離了平臺。我只是試圖讓Close調用兩個ViewModel而讓我留在前一個 – 2014-10-03 16:29:43