我从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()方法。
提前致谢。
答案 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时,这将得到解决。