In meinem Xamarin.Forms
pcl-Projekt habe ich eine xaml
Seite mit label
. Ich möchte label
nach einigen async task
aktualisieren. In meinem ViewModel constructor
setze ich Standardtext für meine label
. Und erstellen Sie eine async Task
Funktion namens SomeTask()
.So aktualisieren Sie die Benutzeroberfläche nach dem asynchronen Task in viewmodel
Frage 1: Wo kann ich SomeTask()
Funktion aufrufen. Nicht in der Lage, async Task
Funktion in constructor
aufzurufen.
Frage 2: Wie zu aktualisieren Label
Text nach async Task SomeTask()
Funktion.
Mein Code:
public class MyPageViewModel : ViewModelBase
{
private String _selectedText;
public String SelectedText
{
get { return _selectedText; }
set {
if (_selectedText != value)
{
_selectedText = value;
}
}
}
public MyPageViewModel()
{
_selectedText = "Welcome"; //Default text
}
private async Task<string> SomeTask()
{
return await Task.Run(async() =>
{
await Task.Delay(3000); //Dummy task. It will return the status of Task.
return "Thanks"; //Update Text
});
}
}
Sie es aus dem Konstruktor aufrufen können - obwohl man nicht * await * it (small es einen Unterschied.). Anstatt die Aufgabe zurückzugeben, könntest du 'string ret = have appear task ...;/* Text aktualisieren */return ret; '? – Default
Sie können eine asynchrone Factory-Methode erstellen und Ihren Konstruktor als privat definieren. Dann rufen Sie diese Methode auf, um eine Instanz von 'MyPageViewModel' zu erstellen. Innerhalb dieser Methode können Sie' string str = await SomeTask' aufrufen. – user3185569