MvxRecyclerView 中的绑定方式 OneTime

Binding Mode OneTime in MvxRecyclerView

当在 MvxRecyclerView 中使用布局时,是否可以将我的其中一个属性的绑定设置为 OneTime?我将它设置为 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" />

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

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; }
    }
}

OneTime 绑定只有在您不回收视图的情况下才能正常工作。这意味着如果您不滚动并更改绑定到 ViewModel 的 Style 属性 的内容。然后它只会触发一次。

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