2013-06-28 31 views
0

我有一個mvvmcross xamarin項目我想弄清楚我應該如何在特定情況下跨屏幕發送數據的最佳方式。如何使用mvvmcross在屏幕之間傳遞數據

我的第一個屏幕是一個搜索過濾器,它包含用戶選擇用於過濾結果的各種標準。第二個屏幕是結果列表屏幕。

我已經看到了處理這個問題許多選擇:

1)使用init方法 - 我在這裏的問題是,當我通過自定義對象的值總是空/默認。如果我傳遞一個字符串,它工作正常。如果我可以傳遞自定義對象,我將通過EntityFilter或實體列表,這是結果。我必須查詢過濾器頁面上的實體,因爲他們在一個過濾器上選擇的內容會根據實體保留的內容而影響其他實體。我已將以下內容添加到AssemblyInfo.cs中,但它仍然無效。

[assembly: InternalsVisibleTo("Cirrious.MvvmCross")] 

2)使用消息。這裏的問題是,過濾器更改時不會創建結果頁面,因此消息傳遞將不起作用。

3)使用內存對象。我創建了一個只包含實體列表的公共屬性的結果服務。它在IoC中被註冊爲懶惰單例(與所有服務一樣)。此方法的工作原理是我目前的解決方案。但它並不「感覺」正確。這感覺就像我做錯了什麼或打破了最佳實踐。這是它應該完成的方式嗎?

回答

0

這是一個相當常見的問題。

最近有一個關於使用自定義類型進行導航的問題:Custom types in Navigation parameters in v3 - 請注意,原始海報在那裏提出了一個解決方案。

在這個主題上還有其他幾個問題。所有這些的基本答案是,在許多平臺上,導航使用序列化技術 - 例如, Xaml Urls或Android Intents。因此,由於「墓碑式」意味着您永遠無法確定「新」頁面將與「舊」頁面處於相同的內存空間,因此默認情況下,MvvmCross堅持使用簡單的可序列化類型來導航所有ShowViewModel

對於爲什麼導航只允許簡單的可序列化類型的相同推理重複回到MvvmCross v1 - 例如, What is the best way to pass objects to "navigated to" viewmodel in MVVMCross?

好消息是,這個主題也在官方的項目文檔中得到了一些愛 - 但這些文檔仍然有點工作正在進行中 - 例如,見https://github.com/MvvmCross/dev.mvvmcross.com/blob/master/_posts/1970-01-01-page-navigation.markdown

+0

感謝您的信息..我在想我應該使用初始化和傳遞只有簡單的類型,因爲我現在做的方式我不能100%確定數據將是相同的 –

相關問題