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 模拟器)。
有人遇到过这个问题吗?
- 当我打开应用程序时,照片页面加载了已保存的照片,并且只有 1 个“加载效果”(短 delay/blink)。如果我再回到那里,它不会加载,而是直接显示图像。
- 我在我的重新加载列表函数中添加了断点,以确保在我添加新照片后每次转到此页面时列表不会重新加载,这样我可以确认当我回来时 ObservableCollection 没有被修改在页面上。
我再说一遍:问题是每次在使用应用程序期间添加新的 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 对象的“文件”属性,但这是我的原因问题。
我正在开发一个应用程序,其中一个页面显示以前的照片和我可以从该应用程序拍摄的新照片。 我有一个 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 模拟器)。
有人遇到过这个问题吗?
- 当我打开应用程序时,照片页面加载了已保存的照片,并且只有 1 个“加载效果”(短 delay/blink)。如果我再回到那里,它不会加载,而是直接显示图像。
- 我在我的重新加载列表函数中添加了断点,以确保在我添加新照片后每次转到此页面时列表不会重新加载,这样我可以确认当我回来时 ObservableCollection 没有被修改在页面上。
我再说一遍:问题是每次在使用应用程序期间添加新的 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 对象的“文件”属性,但这是我的原因问题。