Xamarin iOS: MvvMCross 绑定导航项的后退按钮
Xamarin iOS: MvvMCross Binding back button of navigationItem
我想绑定导航项的后退按钮,每当用户单击后退按钮时,我想在视图模型中执行一些绑定到它的代码。
我当前的代码:
查看:
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(),但事实并非如此。谁能指出错误或帮我解决?
您可以使用以下代码将 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
我想绑定导航项的后退按钮,每当用户单击后退按钮时,我想在视图模型中执行一些绑定到它的代码。
我当前的代码:
查看:
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(),但事实并非如此。谁能指出错误或帮我解决?
您可以使用以下代码将 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