拉到刷新仅执行一次命令

时间:2017-08-15 14:06:44

标签: c# listview xamarin.forms pull-to-refresh

我已经在互联网上搜索了最有可能是一个简单的解决方案,但似乎没有一个像我一样有问题。

所以为了简单解释一下,我使用的是Xamarin Forms并且我有一个ListView:

<ListView x:Name="kpiList" 
          Style="{StaticResource customList}" 
          HasUnevenRows="true" 
          SeparatorVisibility="None" 
          IsPullToRefreshEnabled="true" 
          Grid.Row="1" 
          Grid.Column="0" 
          Grid.ColumnSpan="3">
</ListView>

我定义了它的RefreshCommand和IsRefreshing属性,如下所示:

public partial class MainPage : ContentPage
{
    bool _isRefreshing = false;
    public bool IsRefreshing
    {
        get { return _isRefreshing; }
        set
        {
            _isRefreshing = value;
            OnPropertyChanged(nameof(IsRefreshing));
        }
    }

    public ICommand RefreshData;

    public MainPage()
    {
        RefreshData = new Command(RepopulateList);

        kpiList.RefreshCommand = RefreshData;
        kpiList.IsRefreshing = IsRefreshing;
    {

    void RepopulateList()
    {
        IsRefreshing = true;

        Controller.KPIs.Clear();
        foreach (KPIObj kpi in await 
        WebServices.GetUpdatedKPI(Controller.SavedKPIIds))
        {
            Controller.KPIs.Add(kpi);
        }

        IsRefreshing = false;
    }
}

奇怪的是,我第一次刷新它的效果非常好。但是第二次尝试时,它从不进入Command设置的代码块。

这几乎就像ListView&#34;失去&#34;第一次拉动刷新后指向命令的指针。

1 个答案:

答案 0 :(得分:1)

要使其正常工作,您只需要更改它:

kpiList.IsRefreshing = IsRefreshing;

通过

kpiList.SetBinding(ListView.IsRefreshingProperty, nameof(IsRefreshing));

在第一个中,您只是将页面属性的IsRefreshing值分配给IsRefreshing的{​​{1}}属性。省略了任何更改(如您所见)。

注意:如果您在XAML中进行绑定,它也应该有效,但您还需要在ListView的构造函数中设置BindingContext。 / p>

希望这会有所帮助.-