MvxAdapter绑定项

时间:2015-02-25 08:27:14

标签: c# binding xamarin xamarin.android mvvmcross

我有一个MvxAdapter来显示一些图像。用户可以点击多个图像,图像将处于选择状态。

此时,每次用户点击列表中的图像时,我都会调用以下代码:

_adapter.NotifyDataSetChanged();

这会强制我的MvxAdapter重新加载可见元素。我的适配器:

protected override View GetView(int position, View convertView, ViewGroup parent, int templateId)
{
    ViewHolder holder = null;

    if (convertView == null)
        convertView = _context.LayoutInflater.Inflate(templateId, parent, false);
    else
        holder = (ViewHolder) convertView.Tag;

    if (holder == null)
    {
        holder = new ViewHolder
        {
            Image = convertView.FindViewById<ImageView>(Resource.Id.phonepictures_item),
            Foreground = convertView.FindViewById<LinearLayout>(Resource.Id.phonepictures_foreground)
        };

        convertView.Tag = holder;
    }
    // Code to load bitmap and selected state
    // ...

    // Set bitmap
    holder.Image.SetImageBitmap(bmp);

    // Set selected-layout <<<-----
    holder.Foreground.Visibility = (isSelected) ? ViewStates.Visible : ViewStates.Invisible;

    return convertView;
}

一切正常,但我想知道是否有绑定解决方案。我可以将Foreground-Element的可见性状态绑定到我选择的图像模型状态吗?我在网上找不到一些例子......

1 个答案:

答案 0 :(得分:0)

您可以使用值转换器绑定可见性:https://github.com/MvvmCross/MvvmCross/wiki/Value-Converters#the-mvx-visibility-valueconverters

此外,您也可以绑定图像:

public object Image
        {
            get
            {
                return //Load your image here as a byte[];
            }
        }

然后你可以创建一个像这样的值转换器:

public class ByteToBitmapValueConverter : MvxValueConverter<byte[], Bitmap>
    {
        protected override Bitmap Convert(byte[] value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return BitmapFactory.DecodeByteArray(value, 0, value.Length);
        }
    }

可以绑定到视图:

local:MvxBind="Bitmap ByteToBitmap(Image)"

我想说如果修复绑定,根本就不需要自定义列表适配器。