拉动刷新只执行一次命令
Pull to Refresh executing the Command only once
我在互联网上搜索了最有可能是简单解决方案的方法,但 none 似乎遇到了与我相同的问题。
所以简单解释一下,我正在使用 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;
}
}
奇怪的是,我第一次拉动刷新时效果很好。但是我第二次尝试时,它从未进入命令设置的代码块。
几乎就好像ListView "loses"第一次拉动刷新后指向命令的指针
要使其正常工作,您只需更改此:
kpiList.IsRefreshing = IsRefreshing;
来自
kpiList.SetBinding(ListView.IsRefreshingProperty, nameof(IsRefreshing));
在第一个中,您仅将页面 属性 的 IsRefreshing
的值分配给 ListView
的 IsRefreshing
属性。省略了任何更改(如您所见)。
注意: 如果您在 XAML 中进行绑定,它也应该有效,但您还需要在构造函数中设置 BindingContext
MainPage
.
希望对您有所帮助。-
我在互联网上搜索了最有可能是简单解决方案的方法,但 none 似乎遇到了与我相同的问题。
所以简单解释一下,我正在使用 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;
}
}
奇怪的是,我第一次拉动刷新时效果很好。但是我第二次尝试时,它从未进入命令设置的代码块。
几乎就好像ListView "loses"第一次拉动刷新后指向命令的指针
要使其正常工作,您只需更改此:
kpiList.IsRefreshing = IsRefreshing;
来自
kpiList.SetBinding(ListView.IsRefreshingProperty, nameof(IsRefreshing));
在第一个中,您仅将页面 属性 的 IsRefreshing
的值分配给 ListView
的 IsRefreshing
属性。省略了任何更改(如您所见)。
注意: 如果您在 XAML 中进行绑定,它也应该有效,但您还需要在构造函数中设置 BindingContext
MainPage
.
希望对您有所帮助。-