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 => 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
【讨论】:
以上是关于Xamarin iOS:MvvMCross 绑定导航项的后退按钮的主要内容,如果未能解决你的问题,请参考以下文章
在 Xamarin.Android 中通过 MVVMCross 绑定 OxyPlot
Xamarin iOS - MVVMCross:无法使用 ViewModel 中的命令连接自定义单元格中的按钮
将 Xamarin.UITest 与 MvvmCross 绑定一起使用
Xamarin Forms + Mvvmcross绑定命令不起作用