可见性绑定失败

时间:2014-11-13 16:27:22

标签: visibility mvvmcross

我尝试使用带有FieldBinding插件的Visibility插件,但没有运气。

模特方:

    /// <summary>
    /// Gets or sets the birthdate.
    /// </summary>
    /// <value>
    /// The birthdate.
    /// </value>
    public DateTime? Birthdate { get; set; }

ViewModel方:

public class DisplayUserViewModel : BaseUserViewModel
{
    /// <summary>
    /// The user
    /// </summary>
    public readonly INC<User> User = new NC<User>();
}

查看方面,首先尝试:

        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="@dimen/ListIconTwoLineTileHeight"
            android:paddingRight="@dimen/ListIconTwoLineTextMarginRight"
            local:MvxBind="Visibility User.Birthdate, Converter=Visibility">

第二次尝试:

        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="@dimen/ListIconTwoLineTileHeight"
            android:paddingRight="@dimen/ListIconTwoLineTextMarginRight"
            local:MvxBind="Visibility Visibility(User.Birthdate)">

但结果相同:

MvxBind ( 2574):  33.60 Failed to create target binding for binding Visibility for MvxValueConverterValueCombiner combiner-operation

我只是以生日为例,但每个Visibility绑定都失败了(我有x个绑定的x错误消息)。


编辑1

其他绑定工作,我绑定了一堆文本,并且都显示良好:

      <TextView
         style="@style/TextView.ListWithIcon.Single"
         android:layout_marginTop="@dimen/ListIconTwoLineTextMarginTop"
         local:MvxBind="Text User.FirstName" />

我也尝试绑定到INPC属性,结果相同。


编辑2

正如斯图尔特所说,我试过这个:

<TextView
    style="@style/TextView.ListWithIcon.Single"
    android:layout_marginTop="@dimen/ListIconTwoLineTextMarginTop"
    android:layout_marginLeft="@dimen/ListIconTextMarginLeft"
    local:MvxBind="Text Visibility(User.Birthdate)">

如果Birthdate为null,则TextView上的可见性转换器似乎有效:

Birthdate:  Gone

但它似乎没有绑定到visibility属性:

<TextView
    style="@style/TextView.ListWithIcon.SecondLine"
    android:layout_below="@+id/Birthday"
    local:MvxBind="Visibility Visibility(User.Birthdate)"
    android:text="Whatever birthdate" />

显示&#34;无论生日如何&#34;而Visibility(User.Birthdate)返回Gone ......


编辑3

如果使用Visible伪属性,一切都按预期工作。

<RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="@dimen/ListIconTwoLineTileHeight"
            android:paddingRight="@dimen/ListIconTwoLineTextMarginRight"
            local:MvxBind="Visible User.Birthdate">

2 个答案:

答案 0 :(得分:3)

我对LinearLayout也有同样的问题:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    android:background="@color/white"
    local:MvxBind="Visibility Visibility(IsLoading)">

LinearLayout的可见性不会绑定到我的视图模型:

  

无法为绑定创建目标绑定MvxValueConverterValueCombiner组合器操作的可见性

解决方案:在LinkerPleaseInclude.cs中添加一个条目,以便不从视图中去除Visibility属性:

public void Include(LinearLayout layout)
{
    layout.Click += (s, e) => layout.Visibility = layout.Visibility - 1;
}

答案 1 :(得分:0)

有2种情况:

  1. 如果您使用MvvmCross 5及更低版本,则需要使用:

a)local:MvxBind="Visibility Visibility(User.Birthdate)"在您看来

b)在您的Bootstrap文件夹中添加一个VisibilityPluginBootstrap.cs文件,如下所示:

 using MvvmCross.Platform.Plugins;

    namespace YourNameSpace.Droid.Bootstrap
    {
        public class VisibilityPluginBootstrap
            : MvxPluginBootstrapAction<MvvmCross.Plugins.Visibility.PluginLoader>
        {
        }
    }

enter image description here

  1. 如果您使用MvvmCross 6及更高版本,则只需使用:

    local:MvxBind="Visible User.Birthdate"在您的视图中

并且不需要Bootstrap文件: