在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; }
}
}
答案 0 :(得分:1)
OneTime
绑定才会起作用。这意味着如果您不从ViewModel滚动并更改绑定到Style
属性的内容。然后它只会发射一次。
由于RecyclerView
使用ViewHolder
模式,因此每次都不会重新创建视图本身。这意味着,为了在显示的项目中具有正确的状态,我们需要在每次重新出现在屏幕上时重新绑定它们。