我无法从 a-z 中找到一个关于如何以安全的方式从构造函数调用异步方法的直接示例。以下是我想出的,但我不太了解这些概念,所以我不知道它是否真的正确。有人可以祝福这种格式吗?
创建 IAsyncInitialization 接口(interface):
/// <summary>
/// The result of the asynchronous initialization of this instance.
/// see http://blog.stephencleary.com/2013/01/async-oop-2-constructors.html
/// </summary>
Task Initialization { get; }
然后在这个 ViewModel 上打接口(interface)...:public GotoViewModel() // constructor
{
Initialization = InitializeAsync();
}
public Task Initialization { get; private set; }
private async Task InitializeAsync()
{
//call some async service and get data
}
从使用此 ViewModel 的代码隐藏 xaml.cs:public partial class GotoPage : ContentPage, IAsyncInitialization
{
IGotoViewModel VM;
public GotoPage()
{
InitializeComponent();
VM = App.Container.Resolve<IGotoViewModel>();
Initialization = InitializeAsync();
}
public Task Initialization { get; private set; }
private async Task InitializeAsync()
{
await VM.Initialization;
this.BindingContext = VM;
}
}
这段代码效果很好,但我知道这并不意味着什么。
最佳答案
自从我发布这个问题以来,在我的项目中已经有一年多的时间了,我一直没有使用任何 MVVM 框架,因为我无法忍受被绑定(bind)到可能与最新 Xamarin.Forms 冲突的框架。我最终从与行为相关的 xaml 出现的事件中调用了我的 View 模型中的异步初始化方法。
关于asynchronous - 从 ViewModel 构造函数 Xamarin.Forms 调用异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44057346/