在XF Prims上,我如何将母版页Viewmodel传递给MasterDetailPage的ViewModel,以便可以换出详细信息页

问题描述 投票:0回答:1

我的母版页是在单独的ContentPage中定义的,它具有自己的ViewModel,该ViewModel可以处理用于导航和换出明细页的命令,但是它不起作用;从母版页VM导航到详细信息页会导致母版页消失。据我了解,您需要从MasterDetailPage VM导航。有什么方法可以将母版页的VM传递给MasterDetailPage VM,还是应该做其他事情?

<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>

和在Master's Page 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);
    }
}
xamarin.forms prism
1个回答
0
投票

现在,每次我想换出详细信息页面并像这样OnPageChanges?.Invoke("Page1");从MyMenuPageVM调用事件时,我都会创建一个事件,然后我在MasterDetailPage VM上订阅该事件以处理换出详细信息页面。 >

在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;
    }
}

不确定这是正确的事情,但是可以。 :)

© www.soinside.com 2019 - 2024. All rights reserved.