gpt4 book ai didi

c# - MvvmCross View 模型初始化完成

转载 作者:行者123 更新时间:2023-11-30 20:16:54 26 4
gpt4 key购买 nike

在 MvvmCross 的第 5 版中,添加了一个异步初始化覆盖,您可以在其中进行繁重的数据加载。

public override async Task Initialize()
{
MyObject = await GetObject();
}

有没有办法在View中判断Initialize已经完成?在 View 中说我想将工具栏标题设置为在 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;

}

在设置 SupportActionBar.Title 的那一行,有没有办法确定 Initialize 任务是否已经完成,如果没有,在它完成时得到通知?

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

最佳答案

是的,您可以订阅 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;
}

当然,可能只是监听 ViewModel.MyObject.Name 属性更改会更容易。但以上是监听 InitializeTask 属性变化的通用方式。

您可以在 official documentation 中了解有关 InitializeTaskMvxNotifyTask 的更多信息.

关于c# - MvvmCross View 模型初始化完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47598111/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com