Я использую FFImageLoading для отображения изображений SVG в ListView следующим образом:
1) У меня есть XML файл с категориями и элементами, я его анализирую, у меня есть ObservableCollection, каждая категория является ObservableCollection .
2) У меня есть собственный класс TintedSvgCachedImage, который наследуется от SvgCachedImage (просто добавление некоторого оттенка цвета для привязываемого свойства); Я связываю свойство Source со свойством Category.Label и использую конвертер для возврата SvgImageSource.
3) Если соответствующий встроенный ресурс не найден, я получаю исключение и возвращаю другое изображение.
Это очень хорошо работает, когда изображение найдено. Когда нет, я сталкиваюсь с 2 проблемами:
1) Если это последняя категория в ListView, исключение не выдается, а изображения просто "пустые", ничего не отображается, без ошибок
2) Если это не последняя категория, создается исключение, как и ожидалось, но заменяющее изображение не является тем, которое я хотел загрузить!
Мой XAML-файл:
<ListView.GroupHeaderTemplate>
<DataTemplate x:DataType="models:Category">
<ViewCell Height="50">
<StackLayout Orientation="Horizontal">
<ffsvgimg:TintedSvgCachedImage Source="{Binding Label, Converter={StaticResource CategoryNameToSvgImageResource}}"
TintColor="Accent" />
<Label Text="{Binding Name, Converter={StaticResource StringCaseConverter}, ConverterParameter=U}"
Padding="15, 0" VerticalOptions="CenterAndExpand"
FontSize="12" FontAttributes="Bold" Opacity="0.75" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.GroupHeaderTemplate>
И конвертер:
// Convert Category Name (or Label) to SVG image resource to be displayed in ListView
public class CategoryNameToSvgImageResourceConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value.GetType() != typeof(string))
throw new FormatException("CategoryNameToSvgImageResource: argument value is not of type String.");
try
{
return SvgImageSource.FromResource("CardioCALC.Resources." + value.ToString() + ".svg");
}
catch (Exception)
{
return SvgImageSource.FromResource("CardioCALC.Resources.HeartFailure.svg");
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
Проблема от меня? Что-то отсутствует?
Или мне нужно открыть вопрос на GitHub? (Я не нашел ни одного, но я не искал много, так как я не уверен, что проблема не в моем плохом ...)
Спасибо, Оливье