我在MAUI中有一个应用程序和一个页面,我想在其中重写按钮的返回按钮,以检查是否设置了一些参数,然后才允许返回。
我在文档中看到过这段代码:
<Shell.BackButtonBehavior>
<BackButtonBehavior Command="{Binding VBackCommand}" />
</Shell.BackButtonBehavior>
它工作了,我的视图模型中的命令被执行了,但是如果我使用系统的返回按钮,我可以在不运行命令的情况下返回。
是否有办法拦截系统的后退按钮?
谢谢。
我做了一个演示来控制系统返回按钮的BackButtonBehavior。
假设有一个按钮点击事件处理程序,我们使用它从MainPage导航到另一个页面:
private void OnCounterClicked(object sender, EventArgs e)
{
Shell.Current.Navigation.PushAsync(new NewPage1());
}
在NewPage1 xaml中,你已经定义了BackButtonBehavior:
<Shell.BackButtonBehavior>
<BackButtonBehavior Command="{Binding VBackCommand}" />
</Shell.BackButtonBehavior>
因此,当按下后退按钮时,ViewModel中的命令集将执行。您可以通过使用MessagingCenter或WeakReferenceMessenger发送消息来控制导航。
public Command VBackCommand
{
get
{
return new Command(() =>
{
Console.WriteLine("123");
// if parameter are set, you could send a message to navigate
if (ParameterSet)
{
MessagingCenter.Send<NewPageViewModel>(this, "Hi");
}
});
}
}
在newpage1。cs中,订阅消息和popasync
public NewPage1()
{
InitializeComponent();
this.BindingContext = new NewPageViewModel();
MessagingCenter.Subscribe<NewPageViewModel>(this, "Hi", (sender) =>
{
Shell.Current.Navigation.PopAsync();
});
}
这个效果是你想要的吗?如果你有什么问题,请提出来。