C# MVVMCross Xamarin使用转换器绑定到位图
我有一个可工作的BindableViewPager(感谢Cheesebaron!),在viewpager控件中,我有一个用于每个页面项目的位图。viewpager的My viewmodel包括C# MVVMCross Xamarin使用转换器绑定到位图,c#,android,bitmap,xamarin,mvvmcross,C#,Android,Bitmap,Xamarin,Mvvmcross,我有一个可工作的BindableViewPager(感谢Cheesebaron!),在viewpager控件中,我有一个用于每个页面项目的位图。viewpager的My viewmodel包括 private double _bearing; public double Bearing { get { return _bearing; } set { _bearing = value;
private double _bearing;
public double Bearing
{
get { return _bearing; }
set
{
_bearing = value;
RaisePropertyChanged(() => Bearing);
}
}
其目的是动态创建位图,使其成为反映方位角的图像。因此,我使用值转换器将ImageView绑定到轴承:
<ImageView
...
local:MvxBind="Bitmap Bearing, Converter=BearingToImage" />
public class BearingToImageConverter : MvxValueConverter<double, byte[]>
{
protected override byte[] Convert(double value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Bitmap bmp = BitmapFactory.DecodeResource(Application.Context.ApplicationContext.Resources, Resource.Drawable.direction_pointer_black_bg);
byte[] bitmapData;
using (var stream = new MemoryStream())
{
bmp.Compress(Bitmap.CompressFormat.Png, 100, stream);
bitmapData = stream.ToArray();
}
return bitmapData;
}
}
并且没有显示图像。查看PictureTaking示例,我看到绑定是通过InMemoryImage转换器直接针对字节数组完成的。如果我需要使用自己的转换器,我是否需要做更多的工作来模拟InMemoryImage转换
解决了,并为回答我自己的问题时的不礼貌道歉,但供将来参考:
问题似乎是缺少InMemoryImage转换器。现在,我不再让转换器返回字节[],而是返回一个对象,即位图本身
因此,转换器签名变成:
public class BearingToImageConverter : MvxValueConverter<double, object> { ...
protected override object Convert(double value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { ////
公共类承载图像转换器:MvxValueConverter{。。。
受保护的重写对象转换(双值,类型targetType,对象参数,System.Globalization.CultureInfo区域性){////
其中返回的对象是位图。据我所知,您可以将字节数组绑定到ImageView,但不能将其加倍,这就是为什么会出现该警告的原因。我想这就是为什么您的自定义值转换器根本没有调用的原因。正在调用值转换器。我希望我的绑定会读作“绑定使用字节数组,派生自双方向角,并使用BearingToImageConverter'转换为字节数组。
public class BearingToImageConverter : MvxValueConverter<double, object> { ...
protected override object Convert(double value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { ////