私は簡単な解決策である可能性が最も高いものについてインターネットを精査しましたが、私と同じ問題を抱えていないようでした。コマンドを1回だけ実行してリフレッシュするには
だから、簡単にそれを説明するために、私は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は、最初のプルをリフレッシュした後にコマンドへのポインタを「失う」ようです。あなただけIsRefreshing
にあなたのページプロパティのIsRefreshing
の値を代入している最初のものでは
kpiList.SetBinding(ListView.IsRefreshingProperty, nameof(IsRefreshing));
によって
kpiList.IsRefreshing = IsRefreshing;
:それはあなただけでこれを変更する必要が動作するように
(英語porrのため申し訳ありませんが)の各呼び出しは、あなたのコードに従って、コマンドのdiferentインスタンスを返します。私はここに間違いがあると思う。そのインスタンスを1つだけ返す必要があります...コマンド定義を変更してコンストラクタに設定することをお勧めします –
これを確認するには、メソッド本体をtryブロックに囲み、例外を警告します。私はそれがどこも例外を投げていると思う。 –
提案のおかげでディエゴ、私はあなたが考えたことを試してみたが、それはまだ同じことをしているようだ。エラーはスローされません。 –