Xamarin.Forms 中未触发 OnNavigatedTo() 方法

OnNavigatedTo() method is not triggered in Xamarin.Forms

我从 INavigateAware 界面继承了我的视图模型 class,如下所示,

public class ViewModel : INavigationAware
{
    public ViewModel()
    {

    }

    public void OnNavigatedFrom(NavigationParameters parameters)
    {

    }

    public void OnNavigatedTo(NavigationParameters parameters)
    {
        // some codes
    }

}

并在关联视图(我导航到的页面)中调用该视图模型

public partial class Page1 : ContentPage
{
    ViewModel viewModel;
    public Page1()
    {
        InitializeComponent();
        viewModel = new ViewModel();
        this.Content = myview; //myview is my control like grid
    }
}

现在我的问题是,当我导航到此页面 (Page1) 时,未触发 ViewModel 中的 OnNavigateTo() 方法。请有人帮助我如何触发 OnNavigateTo() 方法。

提前致谢。

首先,检查页面中的 AutowireViewModel 参数是否 class 设置为 True。

其次,你不应该自己分配视图模型,当你调用 PushViewModel 时,Prism 会为你做这件事

第三,棱镜有一个众所周知的局限性: https://github.com/PrismLibrary/Prism/issues/563

还有建议的解决方法:

创建接口:

public interface IPageNavigationAware
{
    void OnAppearing();
    void OnDisappearing();
}

从此界面派生您的 ViewModel class。 在后面的Views代码中:

protected override void OnAppearing()
{
    (BindingContext as IPageNavigationAware)?.OnAppearing();
}

protected override void OnDisappearing()
{
    (BindingContext as IPageNavigationAware)?.OnDisappearing();
}

问题在于 OnAppearing/OnDissapparing 不是可靠的导航方法并且不接受参数,而是页面生命周期方法。它们不指示页面何时被导航到或离开。您可以有一个父页面可以与多个子页面同时出现的实例。这将在 Xamarin 提供适当的导航时得到解决 API.