Нужно перевесить метод навигации - PullRequest
1 голос
/ 21 марта 2019

Я использую 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)': не найден подходящий метод для переопределения

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Я могу придумать лучший способ. Вы используете 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);
    }
1 голос
/ 26 марта 2019

Вы можете получить из ссылки NavigationPage.

public class CustomNavigationPage : NavigationPage
{
   //You can define your container here.
   public CustomNavigationPage()
   {
      //You can resolve here 
   }
}

а также вы можете посмотреть здесь

...