【问题标题】:Reusing items in MvxListView重用 MvxListView 中的项目
【发布时间】:2014-12-08 03:04:44
【问题描述】:

我想知道 MvxAdapter 如何处理 GetBindableView 中的 viewToUse。我知道它会更改该视图的数据上下文,但这是什么意思?如果我们有一些 TextView:

<TextView
        android:layout_width="match_parent"
        android:layout_height="@dimen/warning_item_height"
        local:MvxBind="Text SomeTextProperty; Visibility IsRemoved, Converter=Visibility" />

上下文变化是否会首先确定旧项目中的 IsRemoved 属性是否等于新项目中的属性...并可能避免使用转换器?在这个例子中它可能无关紧要,但如果我们试图隐藏一些图片,它就会成为一个问题。每次都会重画吗?

如果没有 Converter ... 如果我们只有普通的 MvxImageView ?

<Mvx.MvxImageView
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:scaleType="fitCenter"
    local:MvxBind="AssetImagePath SomeImagePath" />

每次都会重绘吗?

【问题讨论】:

    标签: android data-binding mvvmcross


    【解决方案1】:

    重用列表项时,绑定将再次设置 DataContext,这将导致绑定重新评估。

    上下文变化是否会首先确定旧项目中的 IsRemoved 属性是否等于新项目中的属性...并可能避免使用转换器?

    否 - IsRemoved 属性的先前状态未缓存在任何地方 - 因此将调用转换器。

    每次都会重绘吗?

    如果控件的属性没有改变,并且如果控件本身检查了这一点,则可以避免重绘 - 例如对于 Android 上的 MvxImageView,它会在 MvxDynamicImageHelper 中检查 value == existing - 请参阅 https://github.com/MvvmCross/MvvmCross/blob/bbf9a2ac76e74d9404f4b57036c6e29dfe2cc6c3/Plugins/Cirrious/DownloadCache/Cirrious.MvvmCross.Plugins.DownloadCache/MvxDynamicImageHelper.cs#L73

    注意:

      1234563该值将在返回到重用的途中通过空转换。
    • 如果任何应用程序需要优化行为,那么直接使用自定义控件来帮助解决这个问题 - 例如。继承自 MvxImageView 并提供要绑定的自定义 MyAssetImagePath 属性。

    【讨论】:

      猜你喜欢
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      相关资源
      最近更新 更多