Pull To Refresh在Xamarin Forms ListView中不起作用

时间:2017-05-20 20:57:37

标签: .net xaml xamarin xamarin.forms cross-platform

有人可以告诉我我的代码有什么问题吗?我试图让我的xaml页面上的刷新工作,它不适用于Android或iPhone。我想可能就是我的listview布局了。任何人都可以告诉我ListView中是否有可能阻止刷新命令触发的内容?这是我的ListView的xaml代码

 <ContentPage.Content>
    <ListView x:Name="TDRView" HasUnevenRows="True" ItemTapped="OnItemTapped" IsPullToRefreshEnabled="True" RefreshCommand="{Binding RefreshCommand}" IsRefreshing="{Binding IsRefreshing}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <ViewCell.View>
                        <Grid x:Name ="gridTDR">
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto" />
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="50*" />
                                <ColumnDefinition Width="25*" />
                                <ColumnDefinition Width="25*" />
                            </Grid.ColumnDefinitions>
                            <StackLayout HorizontalOptions="StartAndExpand" VerticalOptions="CenterAndExpand" Grid.Column="0" Grid.Row="0">
                                <Label x:Name="lblTDRID" Text="{Binding TDRID}" IsVisible="false" />
                                <Label x:Name="lblCustName" Text="{Binding CustomerName}" FontSize="Medium" TextColor="Black" />
                            </StackLayout>
                            <Button Image="iconApprove.png" Clicked="OnApproveButtonClicked" Grid.Column="1" Grid.Row="0" VerticalOptions="Center" BackgroundColor="Transparent" />
                            <Button Image="iconReject.png" Clicked="OnRejectButtonClicked" Grid.Column="2" Grid.Row="0" VerticalOptions="Center" BackgroundColor="Transparent" />
                        </Grid>
                    </ViewCell.View>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</ContentPage.Content>

以下是代码背后的方法......

    using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Input;
using Xamarin.Forms;

namespace AppNameSpace
{
    public partial class MainPage : ContentPage
    {
        ObservableCollection<TDR> collection = new ObservableCollection<TDR>();

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

        public ICommand RefreshCommand
        {
            get
            {
                return new Command(async () =>
                {
                    IsRefreshing = true;
                    await Service.GetPendingTDRs();
                    IsRefreshing = false;
                });
            }
        }

        public MainPage()
        {
            InitializeComponent();
            TDRView.ItemsSource = collection;
            GetTDRs();
        }
     }
   }

谢谢!

2 个答案:

答案 0 :(得分:0)

注意您正在测试的操作系统/使用pull来刷新。

Windows Phone 8.1不支持

pull-to-refresh。 在Windows Phone 8上,pull-to-refresh不是本机平台功能,因此Xamarin.Forms提供了pull-to-refresh的实现。

最后,请注意,如果列表中的所有元素都可以放在屏幕上(换句话说,如果不需要垂直滚动),则即使刷新也无法在Windows Phone上运行。

https://developer.xamarin.com/guides/xamarin-forms/user-interface/listview/interactivity/#Pull_to_Refresh

答案 1 :(得分:0)

您没有为XAML设置BindingContext。您需要这样,以便XAML知道您在ListView中使用Bindings何时用于RefreshCommand和Refreshing。

要执行此操作,只需在MainPage构造函数BindingContext = this;

中添加此行代码

类似的东西:

public MainPage()
{
    InitializeComponent();
    BindingContext = this;
    TDRView.ItemsSource = collection;
    GetTDRs();
}

this表示后面的代码将作为XAML的绑定上下文。

这是一个拉动刷新的例子。

https://xamarinhelp.com/pull-to-refresh-listview/

希望这会有所帮助.-