Xamarin iOS:MvvMCross 绑定导航项的后退按钮

Posted

技术标签:

【中文标题】Xamarin iOS:MvvMCross 绑定导航项的后退按钮【英文标题】:Xamarin iOS: MvvMCross Binding back button of navigationItem 【发布时间】:2016-07-19 18:50:38 【问题描述】:

我想绑定导航项的后退按钮,每当用户单击后退按钮时,我想在视图模型中执行一些绑定到它的代码。

我当前的代码:

查看:

var bSet = this.CreateBindingSet<xView, xViewModel>();
            bSet.Bind(NavigationItem.LeftBarButtonItem).To(vm => vm.CheckIfLoading);
            //bSet.Bind(NavigationItem.BackBarButtonItem).To(vm => vm.CheckIfLoading);

视图模型:

private ICommand checkIfLoading;
public xViewModel()
            : base() 
        
            this.messenger = mvxMessenger;
            checkIfLoading = new MvxCommand(DoRefresh);
        
public  ICommand CheckIfLoading  get  return checkIfLoading;  
private async void DoRefresh()

  await Task.Delay(5000);

当我点击后退按钮时,我希望它点击 DoRefresh(),但事实并非如此。谁能指出错误或帮助我解决它?

【问题讨论】:

【参考方案1】:

您可以使用以下代码将Clicked 绑定到您的ICommand

this.AddBindings(new Dictionary<object, string>()

     NavigationItem.LeftBarButtonItem, "Clicked CheckIfLoading" 
);

旁注

如果Clicked 不是默认绑定,则以下行可能不起作用: bSet.Bind(NavigationItem.LeftBarButtonItem).To(vm =&gt; vm.CheckIfLoading);

使用.For(labda)方法可以实现绑定到特定属性的其他方法,如下所示:

bSet.Bind(NavigationItem.LeftBarButtonItem).For(lb =&gt; lb.Clicked).To(vm =&gt; vm.CheckIfLoading);

但在这种情况下,这将不起作用,因为 lb.Clicked 需要左手操作(+=-=

有关绑定的更多信息,请查看https://github.com/MvvmCross/MvvmCross/wiki/databinding

【讨论】:

以上是关于Xamarin iOS:MvvMCross 绑定导航项的后退按钮的主要内容,如果未能解决你的问题,请参考以下文章

在 Xamarin.Android 中通过 MVVMCross 绑定 OxyPlot

Xamarin iOS - MVVMCross:无法使用 ViewModel 中的命令连接自定义单元格中的按钮

将 Xamarin.UITest 与 MvvmCross 绑定一起使用

Xamarin Forms + Mvvmcross绑定命令不起作用

Xamarin.IOS中MvvmCross的plugin使用方式

如何将 MVVMCross 与 C# 的标记绑定