Xamarin表单ListView程序刷新在页面加载时不会在Android上停止

Der*_*ter 8 c# android pull-to-refresh xamarin.forms visual-studio-2015

我在Visual Studio 2015中有一个Portable项目,ListView通过以下函数通过API调用填充一些数据refreshData:

async Task refreshData()
{
    myListView.BeginRefresh();
    var apiCallResult = await App.Api.myApiGetCall();            
    myListView.ItemsSource = apiCallResult;
    myListView.EndRefresh();    
}
Run Code Online (Sandbox Code Playgroud)

refreshData() 被称为

protected override void OnAppearing()
{
    base.OnAppearing();
    refreshData();
}
Run Code Online (Sandbox Code Playgroud)

一切都运行良好,除了在Android上,EndRefresh()当初始加载页面时,刷新指示器没有停止或消失.页面是一个TabbedPage所以我可以转到另一个选项卡,然后返回到此页面,刷新指示器正确启动和停止完成我的API调用.

为什么在Android最初加载页面时刷新不会停止?任何帮助,将不胜感激.

注意:当我在iOS上运行时,这完全正常.

到目前为止,我已经尝试过:

  1. 更换myListView.BeginRefresh()myListView.IsRefreshing = truemyListView.EndRefresh()myListView.IsRefreshing = false

  2. Device.BeginInvokeOnMainThread(() => {//update list and endRefresh}).

  3. 使用async void refreshData()而不是async Task refreshData().

Ing*_*tor 2

您需要遵循 MVVM 模式

在你的 ViewModel 上你需要:

  • 实施INotifyPropertyChanged

  • 定义如下属性:

     private bool _IsRefreshing;
     public bool IsRefreshing
     {
         get { return _IsRefreshing; }
         set { SetProperty(ref _IsRefreshing, value; } 
         /*So every time the property changes the view is notified*/
     }
    
    Run Code Online (Sandbox Code Playgroud)
  • 根据您的情况定义获取数据的方法refreshData()

  • 需要时切换 IsRefreshing true/false

在您的页面上,您需要:

  • 将 listview itemSource 绑定到 VM 属性SetPropertyValue

  • 将 ListView.IsRefreshing 绑定到 ViewModel 的 IsRefreshing:

    MyListView.SetBinding<MyViewModel>(ListView.IsRefreshing, vm => vm.IsRefreshing);

是一篇关于 INotifyPropertyChanged 的​​精彩文章