На примерах XF, как передать модель представления главной страницы в модель представления MasterDetailPage, чтобы я мог поменять страницу сведений - PullRequest
0 голосов
/ 22 апреля 2020

Моя главная страница определена в отдельной ContentPage со своим собственным ViewModel, который обрабатывает команды для навигации по страницам сведений и замены, но это не работает; переход на страницу сведений с главной страницы виртуальной машины приводит к исчезновению главной страницы. Как я понимаю, вам нужно перемещаться с виртуальной машины MasterDetailPage. Есть ли способ передать виртуальную страницу мастер-страницы виртуальной машине MasterDetailPage или мне следует заняться чем-то другим?

<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
             x:Class="NGT.Views.MyMasterDetailPage"
             xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
             prism:ViewModelLocator.AutowireViewModel="True"
             xmlns:pages="clr-namespace:NGT.Views"
             MasterBehavior="Split">

    <MasterDetailPage.Master>
        <pages:MyMenuPage/>
    </MasterDetailPage.Master>

</MasterDetailPage>

и в ViewModel страницы мастера (не в MasterDetailPage ViewModel):

    public class MyMenuPageViewModel : ChildBaseViewModel, INavigationAware
    {

           public MyMenuPageViewModel (INavigationService navigationService)
           {
                this.navigationService = navigationService;
                this.ChangeDetailPage = new DelegateCommand(this.OpenDetailPage)
           }

    public async void OpenDetailPage()
    {
        await this.NavigationService.NavigateAsync("FAQPage", animated: false);
    }
}

1 Ответ

0 голосов
/ 23 апреля 2020

На данный момент я создал событие для каждого раза, когда я хочу поменять свою страницу сведений и вызвать событие из MyMenuPageVM, например, так: OnPageChanges?.Invoke("Page1"); Затем я подписываюсь на событие на моей виртуальной машине MasterDetailPage, чтобы обработать обмен страниц сведений.

В MyMenuPageVM (главная страница):

public delegate void MyEventHandler(string page);
public static event MyEventHandler OnPageChanges;

Подписаться на событие в MasterDetailPageVM и обработчик.

public void OnNavigatedTo(INavigationParameters parameters)
{
   MyMenuPageViewModel.OnPageChanges += this.ChangePage;
}

public async void ChangePage(string page)
{
    switch (page)
    {
        case "Page1":
            await this.navigationService.NavigateAsync("Page1");
            break;
        case "Page2":
            await this.navigationService.NavigateAsync("Page2");
            break;
    }
}

Не уверен, что это правильно, но это работает , :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...