我的设置非常简单:ContentPage
只有ListView
个内容。该列表支持pull to refresh。它绑定到命令:
listView.SetBinding<MyViewModel>(ListView.RefreshCommandProperty, vm => vm.RefreshCommand);
listView.SetBinding<MyPageViewModel>(ListView.IsRefreshingProperty, vm => vm.IsRefreshing);
列表为空并绑定到空集合。
刷新命令为:
public ICommand LoadNodesCommand { get; set; }
如果我使用
LoadNodesCommand = new Command(o => {
IsRefreshing = true;
IsRefreshing = false;
});
如果我拉,列表会刷新,一切都很好。请注意,我不修改列表的数据。它是一个空的虚拟命令。
接下来我用它作为我的命令:
LoadNodesCommand = ReactiveCommand.CreateAsyncObservable(x =>
{
IsRefreshing = true;
IsRefreshing = false;
return System.Reactive.Linq.Observable.Empty<IEnumerable<Item>>();
}
再次,一个空虚拟命令。但是这个使得ListView表现得非常奇怪。在拉到刷新之后,它会滚动一下。每次刷新后,它会进一步滚动。我不使用任何其他Rx方法(我没有订阅observable)。这是三次刷新后列表的屏幕截图。它的第一个单元格已移向屏幕底部。
它真的不应该影响ListView ...我没有触及它,也没有它的数据。我还尝试使用Device.BeginInvokeMainThread()
设置IsRereshing = false
。