问题描述
我有Xamarin表单的Listview。列表中每个单元格的内容是文本和一个或多个图像。我搜索一种方法来检测单元格中的所有内容何时完成加载。我的想法是使用Image的IsLoading属性。图片来源是网址url。
这是加载图像列表的FlexLayout的代码:
<FlexLayout AlignContent="Center" AlignItems="Center" Direction="Row" JustifyContent="Center" Wrap="Wrap" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" x:Name="media" Grid.Row="1" Margin="0,10,10" BindableLayout.ItemsSource="{Binding Media}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Image x:Name="img" Source ="{Binding Url}" HeightRequest="{Binding ListHeigth}" WidthRequest="{Binding ListWidth}" Aspect="AspectFit" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" />
</DataTemplate>
</BindableLayout.ItemTemplate>
</FlexLayout>
我还没有找到使用XAML绑定IsLoading属性的方法。作为列表,我不知道如何在每个元素中使用此属性:
img.PropertyChanged += (sender,args) =>
{
if (args.PropertyName == "IsLoading")
{
//do somink
}
};
Xaml中的IsLoading属性如何绑定?还是有其他回调来检测单元格的所有内容已加载?
非常感谢。
解决方法
我还没有找到使用XAML绑定IsLoading属性的方法。
IsLoading
仅具有get
方法,而没有set
方法,因此您不能直接在XAML中添加绑定。
因此,我建议您使用FFImageLoading来实现。
如果您要检测image
何时完成加载。您可以实现Finish
事件
<ffimageloading:CachedImage
Finish="CachedImage_Finish"
HorizontalOptions="Center" VerticalOptions="Center"
WidthRequest="300" HeightRequest="300"
DownsampleToViewSize="true"
Source = "http://loremflickr.com/600/600/nature?filename=simple.jpg">
</ffimageloading:CachedImage>
这是完成事件背景代码。
private void CachedImage_Finish(object sender,FFImageLoading.Forms.CachedImageEvents.FinishEventArgs e)
{
}
如果使用MVVM,则还使用FinishCommand
,然后在ViewModel中绑定命令。
如果要在加载时显示加载图像,可以设置 LoadingPlaceholder = "loading.png"
,这里是类似的线程。