【发布时间】:2016-08-01 10:57:53
【问题描述】:
在我的Xamarin.Forms pcl 项目中,我有一个带有label 的xaml 页面。我想在async task 之后更新label。在我的 ViewModel constructor 中,我为 label 设置了默认文本。并创建一个名为SomeTask() 的async Task 函数。
问题 1:我在哪里可以调用SomeTask() 函数。无法在constructor 中调用async Task 函数。
问题2:如何在async Task SomeTask()函数后更新Label文本。
我的代码:
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
});
}
}
【问题讨论】:
-
你可以从构造函数中调用它——尽管你不能 await 它(那里的差别很小。)。除了返回任务,你不能做
string ret = await Task...; /*update text*/ return ret;吗? -
您可以创建一个异步工厂方法并使您的构造函数私有。然后你调用那个方法来创建
MyPageViewModel的实例在那个方法里面,你可以调用string str = await SomeTask
标签: c# async-await xamarin.forms mvvm-light