我有一个我编写的MVVM Xamarin Forms框架,我试图建立如何在弹出模式对话框时为Soft Navigate Back按钮(在iOS中用于此问题)重写BackButtonText。在Xamarin Forms中显示模态对话框时如何显示和设置'BackButtonText'?
我的导航服务创建其又被经由IoC容器变成NavigationPage像这样的自定义模态页面控制器视图模型:
public async Task PushModalAsync<T>() where T : INavigationPageModel
{
var navigationmodel = _viewModelFactory.CreateModel<ModalPageControllerViewModel<T>>();
var page = _viewFactory.CreatePage(navigationmodel);
await Navigation.PushModalAsync(page);
}
所得页结束了与类结构:
public class NavigationControllerView : NavigationPage, IView
然后让我设置我自己的ViewModel的BindingContext。之后,我希望有约束力为我做其余的重担。在此导航控制器视图上设置绑定上下文将我的第一页(本例中为模态对话框的唯一页面)推送到导航堆栈上。
var page = _viewFactory.CreatePage(_viewModel.CurrentPage);
PushAsync(page);
页面,然后正确地显示我的设备上的弹出页面显示我的导航栏,并在显示的工具栏的项目,如我期望。所有的绑定似乎都按我想象的那样工作,我可以从ViewModel中解散页面。迄今为止都很好。
现在(我在这里猜测),因为模态对话框是模态堆栈中的唯一页面,可能是因为它是模态,所以这个模态页面没有出现“返回”按钮。我想要做的是在模式弹出窗口上显示“返回”按钮并覆盖其文本,以便显示“取消”。这应该看起来像iOS中的“创建新邮件”弹出页面的想法,所以我可以解雇它。这表明它
我看了好几篇文章应为“简单”配股代码
NavigationPage.SetBackButtonText(page, "Some title")
,甚至包括行
NavigationPage.SetHasBackButton(page, this)
但忽视告诉我到底这需要发生。有人认为这应该发生在页面的构造函数中,但是什么页面?它是导航页面本身的页面(据我所知它是托管的模式页面的包装)。
注:我已经在NavigationPage中托管了Modal页面,以便继续显示导航栏和工具栏项目。
我试过把NavigationPage.SetBackButtonText和NavigationPage.SetHasBackButton放在所有的地方,但他们都没有做任何事情。
阅读另一篇文章表明,这些方法只影响'下一个'页面,因此我试图在显示之前将相同的方法应用到上一页,但仍然没有成功。但是实际上,我们没有前一页作为模式弹出窗口,并且是堆栈中唯一的东西。
任何想法,我可能会在这里出错?