[英]MVVMCross Xamarin binding to a bitmap with converter
我有一個可正常工作的BindableViewPager(感謝Cheesebaron!),並且在viewpager控件中,我為每個分頁的項目都有一個位圖。 我的viewpager的viewmodel包括
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;
}
}
有兩行代碼使用矩陣進行旋轉,為清楚起見,我省略了旋轉,因為沒有它們代碼也無法工作。
運行代碼時,將調用轉換器,但會收到警告:
MvxBind:Warning: 54.71 Value was not be a valid Bitmap
並且沒有顯示圖像。 查看PictureTaking示例,我看到使用InMemoryImage轉換器直接對字節數組進行綁定。 嘗試以我已經完成的方式綁定是否有效?如果我需要使用自己的轉換器,是否需要做更多的工作來模擬InMemoryImage轉換?
已解決 ,對於在回答我自己的問題時的不良禮節表示歉意,但以供將來參考:
問題似乎是缺少InMemoryImage轉換器。 現在,我返回一個對象,即位圖本身,而不是讓我的轉換器返回byte []。
因此,轉換器簽名變為:
public class BearingToImageConverter : MvxValueConverter<double, object> { ...
protected override object Convert(double value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { ////
返回的對象是位圖。
據我所知,您可以將字節數組綁定到ImageView但不能將其綁定為double,因此這就是您收到該警告的原因。 我想這就是為什么您的自定義值轉換器根本不調用的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.