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向我展示了一个更好的方法来做我想要的.
是的,您可以订阅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属性更改的通用方法.
您可以了解更多关于InitializeTask
与MvxNotifyTask
中正式文件.