Несколько изображений с одним и тем же imageSource не всегда загружаются (Xamarin)

У меня проблемы с изображениями на одной из моих страниц в Xamarin.Forms.

Обычно у меня выстроены в ряд 5 звезд, и пользователь может щелкнуть одну из звездочек, чтобы поставить оценку. У меня есть два разных изображения: одно - цветной звезды, а другое - черной. Если пользователь щелкнет звездочку номер 3, звездочка 1-3 изменится на цветную, а звездочка 4-5 станет черной. Если вы выберете номер 1, все звезды, кроме первой, будут черными, а если вы выберете последнюю звезду, все 5 звезд будут цветными.

Это мой код:

    ImageSource ratingFill = ImageSource.FromResource("MyProject.Images.starfill.png");
    ImageSource ratingNoFill = ImageSource.FromResource("MyProject.Images.starnofill.png");
    private void ClickRating(int stars)
    {
        rating = stars;
        switch (stars)
        {
            case 1:
                rating1.Source = ratingFill;
                rating2.Source = ratingNoFill;
                rating3.Source = ratingNoFill;
                rating4.Source = ratingNoFill;
                rating5.Source = ratingNoFill;
                labelRatingText.Text = "Poor";
                break;
            case 2:
                rating1.Source = ratingFill;
                rating2.Source = ratingFill;
                rating3.Source = ratingNoFill;
                ...
        }
    }

Кажется, что не все 5 звезд обновляются, когда должны. Это немного случайно, загружают ли они изображение или нет. Иногда, если я нажимаю звездочку 4, цифра 3 просто исчезает (как будто у нее нет источника). Похоже, может возникнуть проблема с использованием одного и того же ImageSource несколько раз в одно и то же время.

Это неправильный способ сделать это?


person mathkid91    schedule 01.06.2017    source источник


Ответы (2)


Я не уверен, но я думаю, что такое поведение становится странным из-за привязок.

Попробуйте изменить объявление вашей переменной rating на это:

ImageSource ratingNoFill => ImageSource.FromResource("MyProject.Images.starnofill.png");
person Diego Rafael Souza    schedule 01.06.2017
comment
Это действительно сработало! Я такого раньше не видел. Это то же самое, что помещать URI ImageSource в каждое изображение.Source при каждом изменении вместо ссылки на один и тот же источник? - person mathkid91; 01.06.2017
comment
На самом деле это похоже на обход ссылки. Вместо одного экземпляра ImageSource он будет получать новый экземпляр для каждой ссылки на эту переменную. Я был чист? - person Diego Rafael Souza; 01.06.2017
comment
Да, это то, что я думал. Круто, я не знал, что это возможно :) Спасибо! - person mathkid91; 02.06.2017

Вы пробовали называть это так?

Device.BeginInvokeOnMainThread(() => ClickRating(stars));
person jtagg    schedule 01.06.2017
comment
Это не сработало :( Для записи изображения обычно загружаются, но иногда одно из 5 исчезает во время смены источника. - person mathkid91; 01.06.2017