Как я могу перемещаться из представления StackLayout DataTemplateSelector? - PullRequest
0 голосов
/ 01 августа 2020

У меня есть 1 стек, содержащий селектор шаблонов данных. Я использую для этого BindableLayout. Теперь каждое дочернее представление внутри stacklayout имеет отдельную модель представления. Из этой ViewModel я хочу перейти к другому экрану.

У меня есть следующий код в моем селекторе шаблонов данных

var pageViewModel = (SomeViewModel)container.BindingContext;
if (view == Type.A)
{
  widgetView = new AView();
  widgetViewModel = pageViewModel.ServiceProvider.GetService<AViewModel>();
}
else
{
  widgetView = new BView();
  widgetViewModel = pageViewModel.ServiceProvider.GetService<BViewModel>();
}
widgetView.ViewModel = widgetViewModel;

var navigationParams = new NavigationParameters
                {
                    { Item, item }
                };
            widgetViewModel.LoadData(navigationParams);

            return new DataTemplate(() => widgetView);

Из CustomView ViewModel я пытаюсь сделать

await NavigationService.NavigateAsync("PageC");

Я получаю объект NavigationService, но приложение не осуществляет переход к странице C Если я вызываю ту же строку в PageViewModel, то приложение перенаправляется на Page C

1 Ответ

0 голосов
/ 02 августа 2020

Реализуйте свойство ICommand в ваших моделях представления с помощью предопределенных действий:

public ICommand Command { get; set; }

И привяжите его к любому элементу управления, который вы используете для события навигации в своих пользовательских представлениях.

ЕСЛИ вы все это делаете в коде вы также должны каким-то образом передать экземпляр PageViewModel PRISM NavigationService в пользовательскую модель представления.

var navigationParams = new NavigationParameters
{
    { Item, item },
    { NavigationService, pageNavigationService)
};

без фактического кода, я не могу точно сказать, как.

...