我有一个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的可见性状态绑定到我选择的图像模型状态吗?我在网上找不到一些例子......
答案 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)"
我想说如果修复绑定,根本就不需要自定义列表适配器。