2014-10-27 79 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)发送消息给您的视图

相关问题