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上运行时,这完全正常.
到目前为止,我已经尝试过:
更换myListView.BeginRefresh()用myListView.IsRefreshing = true和myListView.EndRefresh()用myListView.IsRefreshing = false
用Device.BeginInvokeOnMainThread(() => {//update list and endRefresh}).
使用async void refreshData()而不是async Task refreshData().
您需要遵循 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 的精彩文章
| 归档时间: |
|
| 查看次数: |
2871 次 |
| 最近记录: |