LinearLayout只是忽略MvxBind(MvvmCross)

时间:2013-09-19 22:52:32

标签: binding xamarin.android android-linearlayout mvvmcross

我正在尝试将LinearLayout绑定到根据ViewModel State显示/隐藏。 出于某种原因,它适用于按钮和文本视图,但不适用于LinearLayout。

可能是什么原因?

 <LinearLayout
                android:orientation="vertical"
                android:minWidth="25dp"
                android:minHeight="25dp"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                local:MvxBind="Visibility WaitingForConfirmation">

1 个答案:

答案 0 :(得分:4)

我刚尝试使用bool Visible伪属性进行快速测试,它适用于TextViewLinearLayout

<TextView
    android:text="Random text"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    local:MvxBind="Visible Generosity &gt; 12" />
<LinearLayout
    android:orientation="vertical"
    android:minWidth="25dp"
    android:minHeight="25dp"
    android:background="#ff0000"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    local:MvxBind="Visible Generosity &gt; 12" />

Visibility属性绑定到相同的底层Android隐藏/显示机制 - 它只使用Visibility插件转换bool - &gt; Visibility枚举 - 因此代码应该适用于那也是......


更新:我也尝试过Droid示例https://github.com/slodge/MvvmCross-Tutorials/tree/master/ValueConversion

在此我刚刚将显示的视图更改为https://github.com/slodge/MvvmCross-Tutorials/blob/master/ValueConversion/ValueConversion.UI.Droid/Resources/Layout/View_Visibility.axml

中的LinearLayout

此示例工作正常:

visconv


什么是WaitingForConfirmation?我怀疑它是一个bool,在这种情况下你需要使用可见性转换器,就像在Windows绑定中一样。 Visibility插件中提供了标准可见性转换器,可以使用:

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="200dp"
    android:background="#ff0000"
    local:MvxBind="Visibility MakeItVisible, Converter=Visibility" />

最后一点说明:MvvmCross确实会继续调整(并希望改进)它的绑定类型转换 - 所以在某些时候你可以通过bool使用Visibility enums来逃避 - 但是这个可能永远不会被推荐练习 - 通常最好使用值转换器来控制绑定操作(就像在Windows中一样)。