在Xamarin Forms中,Navigation.PushModalAsync()和Navigation.PushAsync()有什么不同?

时间:2017-11-17 14:28:22

标签: xamarin xamarin.ios xamarin.forms

当我在xamarin表格mvvm架构中使用PushAsync时,我得到错误的原因

await Navigation.PushAsync(new Page2());

错误是

enter image description here

我已通过将PushAsync更改为PushModelAsync

来更正此错误
await Navigation.PushModalAsync(new Page2());

任何人都知道导致此错误的原因是什么?

我从ViewModel调用PushModelAsync

public class Page1Model : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public INavigation Navigation { get; set; }
        public Command ContinueBtnClicked { get; }

        public Page1Model(INavigation navigation)
        {
            this.Navigation = navigation;
            this.ContinueBtnClicked = new Command(async () => await GotoPage2());
        }

        public async Task GotoPage2()
        {
            await Navigation.PushModalAsync(new Page2());
        }
    }

1 个答案:

答案 0 :(得分:3)

App.xaml.cs中将您的第一页打包成NavigationPage,如下所示:MainPage = new NavigationPage(new Page1());

现在它会起作用。如果你只有一个页面,iOS不知道如何从那里导航到另一个页面,所以它需要一个容器页面来处理导航。

模态变体的工作原因是因为它产生了一个新的导航堆栈并在其他所有内容上显示页面(因此是模态的)。