拉到刷新执行命令只有一次
问题描述:
我已经搜索了互联网最可能是一个简单的解决方案,但似乎没有像我一样的问题。拉到刷新执行命令只有一次
所以简单介绍一下它,我使用Xamarin形式,我有一个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在第一次拉动刷新后“丢失”指向该命令的指针。
答
为了使它工作,你只需要改变这一点:
kpiList.IsRefreshing = IsRefreshing;
通过
kpiList.SetBinding(ListView.IsRefreshingProperty, nameof(IsRefreshing));
在第一个,你只分配你的页面属性IsRefreshing
的价值的IsRefreshing
财产的ListView
。任何更改都被省略(如您注意到的)。
注:如果做在XAML它应该也具有约束力,但你还需要设置BindingContext
在MainPage
的构造。
希望这helps.-
+0
完美工作。不能相信我没有考虑到这一点。非常感谢。 –
(对不起,我PORR英文)每次调用您的刷新命令返回命令的diferent例如,根据你的代码。我想这是错误。你应该只返回它的一个实例......我建议你改变你的命令定义,将其设置为一个分离的方法,并将其设置在构造函数 –
为了确保这一点,请将方法体包围在try块中并提醒异常。我想这是抛出一个异常无处 –
感谢Diego的建议,我试过你的想法,它似乎仍然做同样的事情。没有错误被抛出。 –