Я создал приложение Xamarin Forms 3.2 MVVM.Приложение позволяет снимать фото с камеры и показывать фотографии в ListView.
Настройки проекта Visual Studio Android:
Компиляция с использованием версии Android: Android 8.1 Oreo
Манифест Android:
- Минимальная версия Android: Android 5.0 (уровень API 21)
- Целевая версия Android: Android 8.1 (уровень API 27)
В поле зрения есть элемент управления ListViewс табличкой данных, которая показывает только текст и изображение.
<ListView ItemsSource="{Binding Documents}"
Grid.Row="0"
Grid.ColumnSpan="3"
RowHeight="200">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid Margin="5">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Label Grid.Row="0" Text="{Binding FileName}" HorizontalTextAlignment="Center"></Label>
<Image Source="{Binding Image}"
WidthRequest="100"
HeightRequest="100"
HorizontalOptions="Fill"
VerticalOptions="Fill"
Aspect="AspectFit"
Grid.Row="1"/>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Я связываюсь с ListView ObservableCollection из ViewModel
public ObservableCollection<DocumentViewModel> Documents
{
get => _documents;
set
{
_documents = value;
RaisePropertyChanged(nameof(Documents));
}
}
DocumentViewModel класс
public class DocumentViewModel : BindableBase
{
#region Fields
private readonly Document _model;
#endregion
#region Contructors
public DocumentViewModel(Document model)
{
_model = model;
Image = ImageSource.FromStream(() => new MemoryStream(model.Data));
Name = model.Name;
FileName = model.FileName;
}
#endregion
#region Image
private ImageSource _image;
public ImageSource Image
{
get => _image;
set
{
_image = value;
RaisePropertyChanged(nameof(Image));
}
}
#endregion
#region Name
private string _name;
public string Name
{
get => _name;
set
{
_name = value;
RaisePropertyChanged(nameof(Name));
}
}
#endregion
#region FileName
private string _fileName;
public string FileName
{
get => _fileName;
set
{
_fileName = value;
RaisePropertyChanged(nameof(FileName));
}
}
#endregion
}
Класс модели документа
public class Document
{
#region Properties
public DateTime Created { get; set; }
public string Name { get; set; }
public string FileName { get; set; }
public byte[] Data { get; set; }
public int DocumentTypeId { get; set; }
#endregion
}
Сначала я протестировал приложение в эмуляторе Android Genymotion (Samsung Galaxy S8 Android 8.0).
Работает хорошо.Вот результат.
Затем я протестировал приложение на Assus Z00UD Android 6.0.Это тоже работает.Вот результат.
Наконец я протестировал приложение на Android версии Honor 7s 8.1.
ListView не показывает изображения только текст.
Где может быть корень проблемы?Ошибка не отображается.Привязка к ObservableCollection работает, потому что текст метки не пустой.
Спасибо