MvvmCross视图模型初始化完成

Jim*_*cox 2 c# mvvmcross xamarin

在MvvmCross的第5版中,添加了一个异步的Initialize覆盖,您可以在其中进行大量数据加载.

public override async Task Initialize()
{
    MyObject = await GetObject();
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在View中确定Initialize已经完成?在视图中说我想将工具栏标题设置为在MyObject中显示一个字段

    MyViewModel vm;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Create your application here

        this.SetContentView(Resource.Layout.MyView);

        var toolbar = (Toolbar)FindViewById(Resource.Id.toolbar);
        SetSupportActionBar(toolbar);

        vm = (MyViewModel)this.ViewModel;

        SupportActionBar.Title = vm.MyObject.Name;

    }
Run Code Online (Sandbox Code Playgroud)

在设置SupportActionBar.Title的行上,有没有办法确定Initialize任务是否已完成,如果没有,会收到通知吗?

更新:我尝试设置两个正确答案,因为@nmilcoff回答了我的实际问题,而@Trevor Balcom向我展示了一个更好的方法来做我想要的.

nmi*_*off 5

是的,您可以订阅InitializeTask的属性更改.

这样的东西会起作用:

protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);

    // your code

    ViewModel.PropertyChanged += MyViewModel_PropertyChanged;
}

private void MyViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
    if(e.PropertyName == nameof(ViewModel.InitializeTask) && ViewModel.InitializeTask != null)
    {
        ViewModel.InitializeTask.PropertyChanged += ViewModel_InitializeTask_PropertyChanged;
    }
}

private void ViewModel_InitializeTask_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
    if(e.PropertyName == nameof(ViewModel.InitializeTask.IsSuccessfullyCompleted))
        SupportActionBar.Title = ViewModel.MyObject.Name;
}
Run Code Online (Sandbox Code Playgroud)

当然,情况可能会更容易听到ViewModel.MyObject.Name财产变化.但以上是监听InitializeTask属性更改的通用方法.

您可以了解更多关于InitializeTaskMvxNotifyTask正式文件.