簡體   English   中英

需要覆蓋導航方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM