同一个imageSource的多个图片不总是会加载(Xamarin)

3
我在Xamarin.Forms的一个页面上有一些图片问题。
基本上,我有5个星星排成一行,用户可以点击其中一个星星来评分。我有2张不同的图片,一张是彩色的星星,另一张是黑色的星星。如果用户点击第3颗星,第1-3颗星将变成彩色,第4-5颗星将变成黑色。如果选择第1颗星,除第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;
                ...
        }
    }

似乎并不是所有的五角星都在应该更新时被更新了。它们是否加载图像似乎有些随机。有时,如果我点击第四颗星,第三个数字就会消失(就像没有源头一样)。看起来可能是多次使用相同的ImageSource出现了问题,而且同时还有问题。
这是错误的做法吗?
2个回答

3

我不确定,但我认为这种行为是由于绑定引起的。

尝试将您的rating变量声明更改为以下内容:

ImageSource ratingNoFill => ImageSource.FromResource("MyProject.Images.starnofill.png");

这真的起作用了!我以前从未见过这样的方法。这是否与在每次更改时将ImageSource URI放入每个图像源中而不是引用相同的源相同? - mathkid91
实际上这就像是对引用进行绕过。它不仅仅是获取“ImageSource”的一个实例,而是在每次引用该变量时都会获取一个新的实例。我表达清楚了吗? - Diego Rafael Souza
是的,这正是我想的。太棒了,我不知道这是可能的 :) 谢谢! - mathkid91

0

你尝试过像这样调用它吗?

Device.BeginInvokeOnMainThread(() => ClickRating(stars));

这个不起作用 :( 为了记录,图像通常会加载,但偶尔在源更改期间会有5个中的一个消失。 - mathkid91

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接