簡體   English   中英

MVVMCross Xamarin綁定到帶有轉換器的位圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM