我目前正在开发一些用Xamarin.Forms编写的移动项目。我在这里遇到了问题。我需要更新包含一些数据的listview。所以我启用了IsPullToRefreshEnabled = true
和
listView.Refreshing += (sender, e) => {
method1();
method2();
listView.EndRefresh();
};
但是,我不确定如何在所有更新程序完成之前显示旋转指示器。
public class Class1 : ContentPage
{
readonly Class2 mangr = new Class2();
void BuildUI()
{
listView = new ListView
{
ItemsSource = new object[] { },
ItemTemplate = new DataTemplate(listRender.MakeCell),
RowHeight = 88,
HorizontalOptions = LayoutOptions.FillAndExpand,
VerticalOptions = LayoutOptions.FillAndExpand,
IsPullToRefreshEnabled = true,
IsRefreshing = false,
};
listView.Refreshing += (sender, e) =>
{
listView.IsRefreshing = true;
manager.ForceUpdate();
listView.IsRefreshing = false;
listView.EndRefresh();
};
}
}
public class Class2
{
public bool updating = false;
public void PleaseUpdate()
{
if (!running)
{
return;
}
if (!data.loading)
{
updating = true;
PleaseUpdate();
updating = false;
}
}
void PleaseUpdate(Action afterall = null){/some code/}
}
答案 0 :(得分:2)
你的意思是PullToRefresh ActivityIndicator?为此,您必须将IsRefreshing
属性设置为true
。因此,只需在开始时将其设置为true
,并在准备好时将其设置为false
,就像这样。
listView.Refreshing += (sender, e) => {
listView.IsRefreshing = true;
method1();
method2();
listView.IsRefreshing = false;
listView.EndRefresh();
};
如果方法为async
,则无效,因为它会直接转到IsRefreshing = false
。
有多种方法可以解决这个问题,运行它们同步,这可能不是你想要的,或者创建一个绑定到listView.IsRefreshing
属性的公共属性。然后从你真正加载的地方设置该属性!
<强>更新强>
在您提供代码时,有一种方法可以解决这个问题:
listView.IsRefreshing
设为pumpsManager.isLoading
FuelPumpsDataManager
上实施INotifyPropertyChanged并在isLoading
上实施。请注意,您需要将'isLoading'转换为属性。另一种方法是使用PropertyChanged.Fody NuGet包。现在您可以设置isLoading
,只要它开始并停止加载,ListView就应该相应地显示动画。