ImageSource 已加载并在 Collection View 中闪烁

ImageSource already loaded blink in Collection View

我正在开发一个应用程序,其中一个页面显示以前的照片和我可以从该应用程序拍摄的新照片。 我有一个 ObservableCollection,其中对象包含 ImageSource。

try
        {
            if (SDCard.Updated || SDCard.FirstLoad) 
            {                    
                List<MyObject> myObjects = (List <MyObject> )await DataStore.GetItemsAsync(true);
                MyObservableCollection.Clear();
                foreach (var myObject in myObjects)
                {
                    MyObservableCollection.Add(myObject);
                }                          
                
            }
        }
catch (Exception ex)
        {
            Debug.WriteLine(ex);
        }
        finally
        {
            if(IsBusy==true)
                IsBusy = false;
        }

绑定在 CollectionView 中。

<CollectionView x:Name="ItemsListView" ItemsLayout="HorizontalList"
            ItemsSource="{Binding MyObservableCollection}"                        
            SelectionMode="None">
        <CollectionView.ItemTemplate>
            <DataTemplate>
                <RelativeLayout x:DataType="model:MyObject">
                    <Image Source="{Binding PhotoSource}"  BackgroundColor="AliceBlue" Aspect="AspectFill" RelativeLayout.WidthConstraint=
            "{ConstraintExpression Type=RelativeToParent, Property=Width}" RelativeLayout.HeightConstraint=
            "{ConstraintExpression Type=RelativeToParent, Property=Height}"/>
...

PhotoSource 是一个 ImageSource 属性。 从应用程序拍摄新照片后,我将其保存在应用程序中(在 Application.Current.Properties 中)。 然后,当我返回此页面时,“try{}”部分使用保存的数据重建了 ObservableCollection,因此 CollectionView 被更新(在照片加载期间有一点 delay/blink)。

问题是:在此之后,即使我不重新加载链接的 ObservableCollection,每次当我进入显示总照片列表的页面时,应用程序似乎总是“重新加载”照片。有延迟(在我的 Android phone 上测试的 .APK)或闪烁(来自 Android 模拟器)。

有人遇到过这个问题吗?

我再说一遍:问题是每次在使用应用程序期间添加新的 PhotoSource 时,应用程序似乎都会刷新。如果我关闭应用程序,重新启动它,然后转到页面:有一个单一的加载效果,接下来的访问是流畅的(照片源已经加载)。

在详细查看了从内存加载的项目(以前的照片)和新的项目(从应用程序中获取)如何在 pined spy mini-windows 中列出 Visual Studio 之后,我观察到这 :

从内存 ImageSource 加载的项目 属性 : Item.PhotoSource(ImageSource) 有一个文件 属性。

而最近添加的新项目 没有“文件” 属性。

还有解释:

我新添加的 item.ImageSource 属性 是由

构建的
ImageSource.FromStream(() => { return mediaFile.GetStream(); });

而我的 Loaded Item.ImageSource 由

构建
ImageSource.FromPath(stringPath);

当我将新的 item.ImageSource 初始化更改为 ImageSource.FromPath(stringPath) 时,“blink/load 延迟”消失了。

我不知道为什么 ImageSource.FromStream() 初始化会遇到这种行为并且不会构建新 ImageSource 对象的“文件”属性,但这是我的原因问题。