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 它们。
当在 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 它们。