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

时间:2016-07-19 18:50:39

标签: data-binding xamarin xamarin.ios mvvmcross uinavigationitem

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

我目前的代码:

查看:

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 个答案:

答案 0 :(得分:3)

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

this.AddBindings(new Dictionary<object, string>()
{
    { NavigationItem.LeftBarButtonItem, "Clicked CheckIfLoading" }
});

旁注

如果Clicked不是默认绑定,则以下行可能无效: bSet.Bind(NavigationItem.LeftBarButtonItem).To(vm => vm.CheckIfLoading);

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

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

但在这种情况下,由于lb.Clicked需要左手边行动(+=-=

,因此无法正常工作

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