如何在完成所有更新程序时显示纺车?

时间:2016-09-20 08:37:05

标签: c# xamarin xamarin.ios xamarin.android xamarin.forms

我目前正在开发一些用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/}
}

1 个答案:

答案 0 :(得分:2)

你的意思是PullToRefresh ActivityIndi​​cator?为此,您必须将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就应该相应地显示动画。