[英]Need to overide the navigation method
我正在使用autofac進行依賴項注入,並且需要覆蓋導航功能。 為了做到這一點,我做了
Locator.cs(其中包含Cs文件)
private readonly ContainerBuilder _builder;
public locator()
{
_builder = new ContainerBuilder();
register();
Container = _builder.Build();
}
public IContainer Container { get; set; }
private void register()
{
_builder.RegisterType<vm>().As<Ivm>();
_builder.RegisterType<Vm1>();
_builder.RegisterType < basevm>();
_builder.RegisterType<MainPage>();
_builder.RegisterType<xa>();
}
在我的app.Xaml.cs中
在構造函數中
public App()
{
InitializeComponent();
locator locator1 = new locator();
Container = locator1.Container;
MainPage = new NavigationPage(Container.Resolve<MainPage>());
}
public static IContainer Container;
然后我試圖在我無法覆蓋的主頁代碼中覆蓋導航功能。 我所缺少的以及我在哪里使用
public abstract void Navigate(SelectedItemChangedEventArgs e);
public override async void Navigate(SelectedItemChangedEventArgs e)
{
xa patientListViewPage = App.Container.Resolve<xa>();
await Navigation.PushAsync(patientListViewPage);
}
為什么這不起作用。 我發生這個錯誤
'MainPage.Navigate(SelectedItemChangedEventArgs)':找不到合適的方法來覆蓋
您可以從NavigationPage參考中派生。
public class CustomNavigationPage : NavigationPage
{
//You can define your container here.
public CustomNavigationPage()
{
//You can resolve here
}
}
你也可以看這里
我可以想出一種更好的方法,您正在使用Autofac,因此您可以使用可以幫助解決問題的通用方法。
public static async Task NavigateAsync<TContentPage>(INavigation navigation ) where TContentPage : ContentPage
{
var contentPage = App.Container.Resolve<TContentPage>();
await navigation.PushAsync(contentPage, true);
}
另外,如果您需要傳遞參數,可以像這樣修改它
public static async Task NavigateAsync<TContentPage, TNavigationParameter>(INavigation navigation,
TNavigationParameter navParam,
Action<TContentPage, TNavigationParameter> action = null) where TContentPage : ContentPage
{
var contentPage = App.Container.Resolve<TContentPage>();
action?.Invoke(contentPage, navParam);
await navigation.PushAsync(contentPage, true);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.