从Xamarin Forms后面的代码设置图像源

时间:2016-05-26 06:29:32

标签: android xamarin xamarin.android xamarin.forms xamarin-studio

我有一个base64图像,我已将其转换为“Imagesource”格式,如下所示。

imageName = Convert.ToString (output.d.XIMAGE);
                    byte[] data = Convert.FromBase64String (imageName);

                    guestsignature.Add (new guestSignature (ImageSource.FromStream (() => new MemoryStream (data))));

guestsignature是一个bean对象,我使用构造函数创建如下。

public class guestSignature
{
    public ImageSource guestSignatureBase64{ get; private  set; }

    public guestSignature (ImageSource signature)
    {
        guestSignatureBase64 = signature;
    }
}

我创建了一个列表视图来添加如下图像。

<ListView x:Name="GuestSignatureList" RowHeight="100" SeparatorVisibility="Default" BackgroundColor="Transparent">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <ViewCell>
                                <StackLayout Padding="10,10,0,0" Orientation="Vertical" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
                                    <Image WidthRequest="500" HeightRequest="500" Source="{Binding guestSignatureBase64}">
                                    </Image>
                                </StackLayout>
                            </ViewCell>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>

然后我将访客详细信息对象添加到列表中。

GuestSignatureList.ItemsSource = guestsignature;

问题在于,即使正在设置图像源,图像也不会显示在列表视图中。这可能是什么问题?拜托,有人帮忙。

2 个答案:

答案 0 :(得分:0)

在guestSignature中添加一个字符串,并尝试在单元格中显示该字符串,以查看它是否是绑定问题或图像显示问题。

答案 1 :(得分:0)

首先,我建议创建自定义 ORDER BY CASE first_name WHEN 'Jhon' THEN 1 END, last_name, first_name 以将Base64字符串转换为IValueConverter,这对于您的所有应用程序都是可重用的。它很简单 - 对于给定的Base64字符串,它返回ImageSource

ImageSource

在你的xaml中,将新创建的转换器添加到public class Base64ToImageSourceConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { //Try to read value as string and convert it to ImageSource using streams //If the operation fails for some reason, return null. try { var image = value.ToString(); if (image == null) return null; byte[] data = System.Convert.FromBase64String(image); var imageSource = ImageSource.FromStream(() => new MemoryStream(data)); return imageSource; } catch { return null; } } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } 并使用转换器绑定到Base64编码的Image属性。

ResourceDictionary

我已经在iOS和Android上对该示例进行了测试,但它确实有效。 如果它不适合您,请确保您的Base64字符串正确无误。您可以使用THIS ONE等工具在线测试。

您可以找到完整的Base64Sample项目HERE