MvxRecyclerView中的绑定模式OneTime

时间:2018-02-21 16:12:58

标签: mvvmcross

OneTime中使用布局时,是否可以将我的某个属性的绑定设置为MvxRecyclerView?我将它设置为OneTime,但是当我滚动列表时它会保持重新绑定。这是TextView,它一直重新绑定到:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="@dimen/text_huge"
    android:textColor="@color/white"
    local:MvxBind="Text IsAddedToCart, Converter=BoolToFontAwesome, ConverterParameter=fa-shopping-cart|fa-cart-plus; Style ., Converter=String, ConverterParameter=fonts/fontawesome.ttf, Mode=OneTime" />

我将Style的绑定模式设置为OneTime,但是当我滚动列表中的项目时它会保持重新绑定(我知道因为我设置了一个断点)。这是我Style绑定的类:

public class StyleTextViewBinding : MvxAndroidTargetBinding
{
    readonly TextView _textView;

    public StyleTextViewBinding(TextView textView) : base(textView)
    {
        _textView = textView;
    }

    #region implemented abstract members of MvxConvertingTargetBinding
    protected override void SetValueImpl(object target, object value)
    {
        var font = Typeface.CreateFromAsset(_textView.Context.Assets, value.ToString());
        _textView.Typeface = font;
        // I put a break point here, and I can see that it keeps rebinding
    }
    #endregion

    public override Type TargetType
    {
        get { return typeof(string); }
    }

    public override MvxBindingMode DefaultMode
    {
        get { return MvxBindingMode.OneTime; }
    }
}

1 个答案:

答案 0 :(得分:1)

只有在您不回收视图时,

OneTime绑定才会起作用。这意味着如果您不从ViewModel滚动并更改绑定到Style属性的内容。然后它只会发射一次。

由于RecyclerView使用ViewHolder模式,因此每次都不会重新创建视图本身。这意味着,为了在显示的项目中具有正确的状态,我们需要在每次重新出现在屏幕上时重新绑定它们。