2016-09-20 51 views
0

我目前正在研究一些写在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/} 
} 

回答

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.IsRefreshingpumpsManager.isLoading
  • FuelPumpsDataManager落实INotifyPropertyChanged并实施在isLoading。请注意,您需要将'isLoading'转换为属性。另一种更简单的方法是使用PropertyChanged.Fody NuGet包。

现在您可以设置isLoading,只要它启动并停止加载,您的ListView应该相应地显示动画。

+0

谢谢你的回答。是的,我试过那个。对不起,我忘了提及那些方法在引擎盖下调用异步方法。这件事会正常工作吗? – Petr

+0

您使用任何类型的绑定或MVVM? –

+0

是的,我正在使用MVVM – Petr

相关问题