在Xamarin.Forms中不触发OnNavigatedTo()方法

时间:2016-10-06 10:09:28

标签: xamarin xamarin.forms prism

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

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()方法。

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

其次,您不应该自己分配视图模型,当您调用PushViewModel时,prism会为您执行此操作

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

还有建议的解决方法:

创建界面:

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

从此界面派生ViewModel类。 在后面的视图代码中:

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

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

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