在大多数情况下,屏幕上的数据布局实际上并不依赖于数据本身,而且通过绑定到isHidden,可以直接管理mvvmcross等可见性设置等简单设置。对于更高级的屏幕相关方面,可以对视图进行子类化,并在setter中进行视图调整。这方面的例子是N = 33 - “在iOS,Android和Windows中动画Mvvm文本 - N + 1天的Mvvmcross”。具体来说是here is what I'm talking about。
但是,如果我有这样的情况,我希望定位与屏幕上的数据绑定的元素取决于数据本身,并使事情变得更糟 - 如果定位规则影响其他元素屏幕也是?
这方面的一个例子是:屏幕上最多5个按钮,相隔10个像素。如果某些源数据为空,则应排除每个按钮 - 因此屏幕上的其余按钮布局必须根据数据而改变。无论有多少按钮被跳过,我们都希望按钮相隔10个像素。
对于iOS autolayout可以容纳这一点。但是,假设我现在没有使用autolayout,即使我可能会使用它,在代码中手动执行布局的其他选择是什么呢?在某些情况下,布局规则可能是非线性的,或者太复杂,无法自动布局以便能够为我配置视图。
我所做的(目前)是对相关视图元素进行子类化,并在setter中,在父视图上运行relayout
方法,该方法应用我需要的所有子规则元素。关于这种方法的蹩脚部分是我为每个这样的元素运行relayout
一次,当我真的只需要运行一次代码时(至少对于初始值)。此后,如果以这种方式绑定任何数据更改,则重新布局整个视图是合适的,但不是在我们首次初始化屏幕并且所有值立即更改时。
所以至少,抑制relayout
次调用的初始化是很好的(在初始数据滚动期间影响其他元素的每个屏幕元素都有一个)。
有没有人对此有过想法?
答案 0 :(得分:0)
我会使用Messenger插件将ViewModel的重播请求传递给View。
初始化后发布RelayoutMessage。然后在数据发生变化时再次发布。
通过使用消息,您仍然可以将View和ViewModel分开。