为什么我的 Xamarin.Forms UWP 的 ListView 不提供“拉动滚动”行为?

问题描述

我正在构建一个 Xamarin.Forms UWP 应用程序,我在其中提供了一个页面代码隐藏填充的 ListView

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage ...>
   <ContentPage.Content>
      <ListView IsPullToRefreshEnabled="True"
                ItemsSource="{Binding Items,Mode=OneWay}"
                IsRefreshing="{Binding IsRefreshing,Mode=OneWay}"
                RefreshCommand="{Binding RefreshCommand}"/>
   </ContentPage.Content>
</ContentPage>

绑定工作正常,但问题是我不明白为什么我不能拉来刷新列表。该列表只是静态的;我只能使用鼠标滚轮或滚动条向上或向下滚动。页面代码隐藏是这样的:

public partial class MainPage {
   public MainPage() {
      BindingContext = this;
      Items = new ObservableCollection<string> { "Hi","Hi","Hi" };
      
      RefreshCommand = new Command(async () => {
                IsRefreshing = true;
                await RefreshData();
                IsRefreshing = false;
      });

      InitializeComponent();
   }

   private bool _isRefreshing = false;
   public bool IsRefreshing {
      get { return _isRefreshing; }
      set {
         _isRefreshing = value;
         OnPropertyChanged(nameof(IsRefreshing));
      }
    }

    public ObservableCollection<string> Items { get; }
    public ICommand RefreshCommand { get; }

    private async Task RefreshData() { /* ... */ }
}

你能帮我找出问题吗?

解决方法

PullToRefresh 未在 ListViewRender.cs 的 UWP 版本中实现。如果您在 Xamarin.Forms 源中搜索 IsPullToRefreshEnabled,您只会在 ListViewRenderer 的 iOS 和 Android 实现中找到它。

以下错误报告中对此进行了讨论,并提出了使用 RefreshView 的当前建议:

PullTORefresh is not working for the UWP platform using XamarinForms ListVIew

请尝试使用 RefreshView。谢谢!