2014-10-27 78 views
0

我使用Xamarin與MvvmCross創建iPad應用iPad應用程序在設備旋轉後重繪接口。在這個應用程序中,我希望支持旋轉,以便在發生旋轉事件時自動調整佈局。使用Xamarin和MvvmCross

我知道GetSupportedInterfaceOrientations和ShouldAutorotate方法,我試圖重寫以捕獲事件並重置我使用的ViewModel中的可觀察屬性。此外,瀏覽已經建立在兩次嘗試:

1)設置的控制(即標籤)被綁定到屏幕屬性:

var theLabel = new UILabel(new RectangleF(0, 0, UIScreen.MainScreen.Bounds.Width, 30)); 

2)設置的控制(即一個標籤)通過在View的GetSupportedInterfaceOrientations和ShouldAutorotate方法中設置的可觀察的ViewModel屬性綁定到屏幕屬性。然而,該值這裏沒有約束,只是設置:

var theLabel = new UILabel(new RectangleF(0, 0, ViewModel.TheLabelWidth, 30)); 

我試圖通過在delaybind一個bindingset設置相應的寬度,但寬度屬性不能夠在。對於要設置( lambda表達式),如我所料。

不管是什麼原因,它似乎是接口沒有重繪。 ViewModel中的值確實被設置。任何人對此有任何建議?

在此先感謝。

回答

0

爲什麼你要處理UI相關的任務在視圖模型?您應該使用MVVM模式的主要原因是將邏輯從UI分離出來。邏輯進入ViewModel,用戶界面進入視圖。所以你不應該把任何UI測量和旋轉處理放到ViewModel上,因爲它不是邏輯的一部分,不能在其他平臺上重用。

如果您想自動處理旋轉,您應該使用約束或使用允許您創建自動佈局的工具(即http://www.toptensoftware.com/xibfree/)。

0

我建議你閱讀更多關於MVVM模式。

不應該有任何UI相關的值\在視圖模型屬性!

這意味着,沒有屏幕座標位置控制,無色差值,沒有字體的名字,絕對沒有涉及到UI!

視圖模型應始終視圖和平臺無關。

如果你需要有特定的UI相關的值(控制位置,能見度等),你應該處理的平臺特定的視圖代碼(例如在iOS上,UIViewController的)所有的視圖有關的東西

取決於從視圖模型值,那麼你應該使用一個值轉換器(瞭解他們在這裏https://github.com/MvvmCross/MvvmCross/wiki/Value-Converters

其次,我不明白你正在努力實現與您發佈的代碼到底是什麼,但要您確定您使用的是正確的iOS佈局系統。使用AutoLayout定位和調整控件的大小,使您的用戶界面可以在任何屏幕大小,任何iPhone和任何iPad上查看和工作。

0

Yout viewmodel需要使用信使(如MvxMessenger)發送消息給您的視圖

相關問題