【问题标题】:Xamarin iOS: MvvMCross Binding back button of navigationItemXamarin iOS:MvvMCross 绑定导航项的后退按钮
【发布时间】: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(),但事实并非如此。谁能指出错误或帮助我解决它?

【问题讨论】:

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


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 2018-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多