2013-06-11 48 views
0

我正在研究mvvmcross,並且如果我可以將它用於我將要開發的iPhone(以及最終iPad和Android)應用程序。 MVVM模式非常強大,對我來說效果很好,但我有幾個視圖,我需要添加一個導航控件,允許用戶跳轉到幾個不同的其他視圖,我想知道什麼是最好的方式。創建來自多個視圖模型的視圖

現在,我創建了一個NavigationControlViewModel,它公開了一個NavigationLinkViewModel集合,它具有鏈接文本屬性和一個將顯示相應視圖的命令。但要將它添加到例如MyViewModel的視圖中有點棘手。現在我所做的就是添加NavigationControlViewModelMyViewModel,這樣我可以在MyView其綁定:

private NavigationControlViewModel _nav; 
    public NavigationControlViewModel Navigation { 
     get { 
      _nav = _nav ?? new NavigationControlViewModel (Mvx.Resolve<INavigationService>()); 
      return _nav; 
     } 
    } 

這工作,但似乎並沒有很好地爲載我想是。我仍然需要爲MyView添加控件NavigationControlViewModel,然後將其添加到需要它的每個其他視圖(以及將其添加到它們的視圖模型中)。

在iOS和MVVM中處理這類事情的最佳做法是什麼?

我已經看過使用拆分視圖的視頻,但我不確定這是否是最佳方法。我需要一個垂直分割,我只需要它在一些的意見,而不是每個視圖。

回答

1

爲了共享視圖模型之間的導航機制,我想你可以像使用NavigationControlViewModel一樣使用聚合,或者可以對類BaseViewModel中的所有導航項使用繼承。

我個人很樂意使用其中的任何一種,但會確保將我所有的導航選項公開爲ICommand s - 僅僅是因爲這樣.Net風格的數據綁定通常期望'動作掛鉤'被呈現。注意,這裏產生的ICommand的的反映方式 - 看http://slodge.blogspot.co.uk/2013/03/fixing-mvvm-commands-making-hot-tuna.html

對於通過View在屏幕上竟呈現ViewModel ...我會鼓勵你相信,你可以做任何你和你的UX /設計團隊想要。

一些標準表示方法的通過可供選擇:UINavgiationControllerUISplitViewControllerUITabBarViewControllerUIPopupViewPresentModalViewController - 你可以自由地使用這些並把它們結合在一起 - 例如你可以有一個導航控制器,深兩層顯示其中包含有兩個孩子一個拆分視圖一個模式的看法...

超出了標準方法,還有很多其他的UI設計範式的人選擇了:

默認情況下,MvvmCross爲您提供多呈現每一個View「整個頁面」主持人 - ViewModel對的UINavigationController內以同樣的方式。正如您在提及的N + 1視頻中看到的那樣,您可以輕鬆地覆蓋該行爲,然後您可以選擇以任何喜歡的方式呈現View - ViewModel對 - 例如,你可以選擇呈現整個頁面,有些使用飛出,然後使用選項卡。

由於IMvxTouchView演示者只是C#代碼,並且由於我們開發愛編寫C#代碼,所以我們可以在演示者中實現我們想要的任何美妙的邏輯,包括測試當前正在顯示的代碼以確定顯示的位置下一頁。

我不能評論什麼'最佳實踐'是使設計看起來不錯。

但我相信如果你堅持通過ShowViewModel來展示你的視圖模型,那麼這將使你在每個平臺上使用什麼演示策略時具有最大的靈活性。

有關演示者的更多內容可通過http://slodge.blogspot.co.uk/2013/06/presenter-roundup.html

相關問題