方法未在 ViewModel - MVVMCross 中调用

本文关键字:MVVMCross 调用 ViewModel 方法 | 更新日期: 2023-09-27 17:56:07

我有两个视图:MainViewProfileView

用户在ProfileView中设置Age属性,然后单击上一个箭头按钮(PreviousDialog 绑定),以便MainView通过Messaging协议更新Age属性。

当用户单击上一个箭头按钮时,ProfileViewModel中的以下实现不会调用NotifyUpdate方法。我想知道我错过了什么或做错了什么?

配置文件视图模型.cs

public ICommand PreviousDialog
{
   get
   {
       NotifyUpdate();
       return new MvxCommand(() => ShowViewModel<MainViewModel>());
    }
}
// the following method does not get called 
private void NotifyUpdate()
{
    var message = new CustomMessage(this, Age);
    var messenger = Mvx.Resolve<IMvxMessenger>();
    messenger.Publish(message);
}

方法未在 ViewModel - MVVMCross 中调用

当你按下 previous arrow button 时,不会调用 ICommand 属性的getter。相反,发生的情况是调用ICommand的 Execute 方法,该方法调用您提供给MvxCommanddelegate...ShowViewModel<MainViewModel>() .

如果您希望在单击previous arrow button时调用NotifyUpdate,则应将NotifyUpdate调用与ShowViewModel<MainViewModel>()一起放入单独的方法中,并将该方法传递到MvxCommand中....像这样:

public ICommand PreviousDialog
{
   get
   {
       return new MvxCommand(() => NotifyAndNavigate());
   }
}
private void NotifyAndNavigate()
{
    NotifyUpdate();
    ShowViewModel<MainViewModel>();
}