FFImageLoading имеет неправильное поведение, когда ресурс не найден (проблема или PEBKA C?) - PullRequest
0 голосов
/ 20 апреля 2020

Я использую 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? (Я не нашел ни одного, но я не искал много, так как я не уверен, что проблема не в моем плохом ...)

Спасибо, Оливье

...