You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Xamarin中用C#编程实现下拉刷新功能

纯C#实现Xamarin.Forms下拉刷新(不用XAML)

嘿,作为曾经也在Xamarin+C#新手阶段摸爬滚打的人,太懂你找不到纯代码实现下拉刷新教程的苦恼了!很多教程确实都偏向XAML,但其实用纯C#完全可以搞定,我给你一步步拆解下怎么实现👇

核心控件:RefreshView

Xamarin.Forms从4.3版本开始提供了RefreshView控件,这是官方推荐的实现下拉刷新的标准方式,我们完全可以用C#代码来创建和配置它,不需要依赖XAML。它的核心逻辑是:

  • 把需要添加下拉刷新功能的列表(比如ListView或CollectionView)作为它的Content
  • 通过RefreshCommand绑定下拉时要执行的刷新逻辑
  • 用IsRefreshing属性控制刷新指示器的显示/隐藏

完整代码示例(基于ListView)

下面是一个完整的页面代码,直接复制到你的项目里就能运行:

using Xamarin.Forms;
using System.Collections.ObjectModel;
using System.Threading.Tasks;

namespace YourAppNamespace
{
    public class PullToRefreshPage : ContentPage
    {
        private ListView _itemListView;
        private RefreshView _refreshView;
        private ObservableCollection<string> _itemSource;

        public PullToRefreshPage()
        {
            // 初始化数据源(用ObservableCollection方便自动更新UI)
            _itemSource = new ObservableCollection<string>();
            LoadInitialItems();

            // 构建ListView
            _itemListView = new ListView
            {
                ItemsSource = _itemSource,
                // 设置列表项模板
                ItemTemplate = new DataTemplate(() =>
                {
                    var itemLabel = new Label { Margin = new Thickness(15, 10) };
                    itemLabel.SetBinding(Label.TextProperty, "."); // 绑定到数据源的字符串本身
                    return new ViewCell { View = itemLabel };
                })
            };

            // 构建RefreshView并关联ListView
            _refreshView = new RefreshView
            {
                Content = _itemListView,
                // 绑定刷新命令:下拉时执行ExecuteRefreshCommand方法
                RefreshCommand = new Command(async () => await ExecuteRefreshCommand())
            };

            // 设置页面内容为RefreshView
            Content = _refreshView;
            Title = "纯C#下拉刷新演示";
        }

        // 加载初始数据
        private void LoadInitialItems()
        {
            for (int i = 1; i <= 10; i++)
            {
                _itemSource.Add($"初始条目 {i}");
            }
        }

        // 刷新逻辑:模拟网络请求/数据更新
        private async Task ExecuteRefreshCommand()
        {
            // 模拟2秒的加载耗时(实际项目里换成你的API请求或数据处理)
            await Task.Delay(2000);

            // 更新数据源
            _itemSource.Clear();
            for (int i = 1; i <= 10; i++)
            {
                _itemSource.Add($"刷新后条目 {i}");
            }

            // 必须手动结束刷新,否则指示器会一直转
            _refreshView.IsRefreshing = false;
        }
    }
}

换成CollectionView的情况

如果你用的是CollectionView(Xamarin.Forms推荐的新一代列表控件),代码几乎一样,只需要把ListView部分替换成下面的代码:

// 构建CollectionView
var itemCollectionView = new CollectionView
{
    ItemsSource = _itemSource,
    ItemTemplate = new DataTemplate(() =>
    {
        var itemLabel = new Label { Margin = new Thickness(15, 10) };
        itemLabel.SetBinding(Label.TextProperty, ".");
        return itemLabel;
    })
};

// 把RefreshView的Content换成CollectionView
_refreshView.Content = itemCollectionView;

关键注意事项

  • 确保你的Xamarin.Forms版本≥4.3,不然RefreshView会不存在,升级NuGet包即可
  • 刷新完成后一定要设置_refreshView.IsRefreshing = false,否则刷新指示器会一直显示
  • 数据源推荐用ObservableCollection,这样数据更新时UI会自动同步

内容的提问来源于stack exchange,提问作者user9487391

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:49:33