我已经在互联网上搜索了最有可能是一个简单的解决方案,但似乎没有一个像我一样有问题。
所以为了简单解释一下,我使用的是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;第一次拉动刷新后指向命令的指针。
答案 0 :(得分:1)
要使其正常工作,您只需要更改它:
kpiList.IsRefreshing = IsRefreshing;
通过
kpiList.SetBinding(ListView.IsRefreshingProperty, nameof(IsRefreshing));
在第一个中,您只是将页面属性的IsRefreshing
值分配给IsRefreshing
的{{1}}属性。省略了任何更改(如您所见)。
注意:如果您在XAML中进行绑定,它也应该有效,但您还需要在ListView
的构造函数中设置BindingContext
。 / p>
希望这会有所帮助.-