Связывание изображений ListView из базы данных SQLite, Xamarin - PullRequest
0 голосов
/ 09 мая 2018

У меня есть модель Person:

 public class Person
 {
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    public string FirstName{ get; set; }
    public string LastName{ get; set; }
    public byte[] Image { get; set; }
 }

В моей базе данных SQLite у меня есть картинки, хранящиеся в таблице. Я пытаюсь показать изображения в ListView. Итак, реализовал ImageConverter:

  public class ImageConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        ImageSource retSource = null;
        if (value != null)
        {
            byte[] imageAsBytes = (byte[])value;
            var stream = new MemoryStream(imageAsBytes);
            retSource = ImageSource.FromStream(() => stream);
        }
        return retSource;
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo     culture)
    {
        throw new NotImplementedException();
    }

}

В коде Xaml я пытаюсь привязать и преобразовать изображение следующим образом:

<Page.Resources>
    <converters:ImageConverter x:Key="ImageConverter" />
</Page.Resources>
<ContentPage.Content>
    <ListView x:Name="PersonListView">

        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell Height="220">
                  <Image Source="{Binding Image, Converter={StaticResource ImageConverter}}"/>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</ContentPage.Content>

Когда я запускаю страницу, я получаю эту ошибку:

System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта.

Я не понимаю, где это не так в моем коде. Как я могу просматривать изображения из моей базы данных?

1 Ответ

0 голосов
/ 09 мая 2018

Попробуйте этот код в своем конвертере и дайте мне знать, работает он или нет:

public class ImageConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {                        
        return "data:image;base64," + Convert.ToBase64String(value);;
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo     culture)
    {
        throw new NotImplementedException();
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...