非常に奇妙なシナリオ...誰かが助けてくれるかもしれません。この上に私の頭を壊す。OnPropertyChanged()がトリガーされてから10秒後にXamarin UIが更新されます
private string _myText = "Hello";
public string MyText
{
get { return _myText; }
set
{
_myText = value;
OnPropertyChanged();
//OnPropertyChanged("IsSearching");
}
}
私は、このメソッドを実行したときに何が起こっているかをデバッグするXAML Xamarinビューでラベルに自分のMyTextをバインドさ。
ボタンは、テキストが更新される素晴らしいクリックされたが、それだけで、3に更新されますすることになっている10〜15秒のような第二の時間に更新されますので、private async void Edit_Survey_Button_OnClicked(object sender, EventArgs e)
{
MyText = "Text Before Long Method";
Stopwatch s = new Stopwatch();
await Task.Run(() =>
{
s.Start();
Task.Delay(3000).Wait();
MyText = "Text after long method" + s.ElapsedMilliseconds.ToString();
});
}
!私はなぜこれを実行するかについて非常に多くのオプションを試したのですが、MyTextが別のスレッドに設定されている可能性があります。
遅延の代わりにデータのダウンロードが行われ、データのダウンロード後にいくつかのUI要素が初期状態から変更されているため、このテストを行っています。今、私はそれをどうやって行うのかについて疑いがあり、うまくいけば、他の人も同様の状況に遭遇していることを願っています。
________Update 1 SushiHangoverにより示唆されるように
private void Edit_Survey_Button_OnClicked(object sender, EventArgs e)
{
IsSearching = "Method Start Edit";
Task.Run(async() =>
{
await Task.Delay(3000);
Device.BeginInvokeOnMainThread(() => { IsSearching = "Yeeeeehuuuuuuu!"; });
});
}
助けにはなりませんでした。
あなたは '.Wait()'を使って*を同期的にブロックしていますが、代わりに 'await Task.Delay(3000);'を使用します。そしてあなたの 'TaskRun'で、' MyText'割り当てを 'Device.BeginInvokeOnMainThread'にラップします。 – SushiHangover
不幸にもこれはうまくいきません –
しかし、それは完全に意味があります、私はあなたが言及したものをどのように実装したかについての更新を挿入しました。まだ動作しません。 lableは20秒で更新されます... –