为什么空的ReactiveCommand.CreateAsyncObservable()会损坏我的Xamarin.Forms ListView,但简单的ICommand有效?

时间:2015-06-24 20:03:41

标签: system.reactive xamarin.forms reactiveui

我的设置非常简单: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

enter image description here

0 个答案:

没有答案