Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como fazer um botão dentro da MasterView que Navegue para outra ContentPage?

Como eu faço para criar um evento de botão que aponte para outra página? Como se fosse um botão Home que volta para a página principal ou navega para outra página dentro de uma NavigationPage

2 respostas

Olá Fernando, tudo bem?

Você tentou colocar a ação para uma nova NavigationPage, no caso da Home, passando a ViewModel com os dados da página atual?

Acredito que para navegar para alguma página intermediária seria necessário passar a ViewModel referente a página com os dados (objeto) já preenchidos.

Pode ser que precise de um construtor novo que receba os parâmetros que já foram definidos para manter os dados que foram selecionados anteriormente.

Espero ter ajudado!

solução!

Olá Fabiano, tudo bem?

Depois de muita luta consegui resolver, tive que fazer uma List com Binding, de fato a lógica que eu queria n iria funcionar nunca porque a Master não faz parte da pilha de navegação (NavigationPage) Então na criação da MasterDetailView aonde o professor fazia a instância da outra página MasterView eu decidi remove-la e então definir o MENU Master ali mesmo, sem chamar outra página pelo XAML.

Ficou assim:

1- Tive que criar uma Classe chamada MenuItems

    public class MasterPageItem
    {
        public string Title { get; set; }
        public string Icon { get; set; }
        public Type TargetType { get; set; }
    }
}

Em seguida no MasterDetailView.xaml

<MasterDetailPage.Master>
        <!-- Cabeçalho da Menu Master--> 
        <ContentPage Title="Menu"  <!-- Defina um Título para a ContentPage se não n irá funcionar -->
                     BackgroundColor="White">
            <StackLayout Orientation="Vertical">
                <!-- Este stack Layout você pode usar depois para outro tipo de dado que você queira implementar no menu-->
                <StackLayout.Children>

    </MasterDetailPage.Detail>

Nessa parte removi a instância da <view:MasterView.xaml > e decidi fazer o Menu ali mesmo. Com a criação de uma ListView:

<ListView x:Name="navigationDrawerList"
                  RowHeight="55"
                  SeparatorVisibility="Default"
                  BackgroundColor="White"
                  ItemSelected="OnMenuItemSelected">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <ViewCell>
                                <!-- Main design for our menu items -->
                                <StackLayout VerticalOptions="FillAndExpand"
                             Orientation="Horizontal"
                             Padding="20,10,0,10"
                             Spacing="20"
                                             >
                                    <Image Source="{Binding Icon}" 
                         WidthRequest="40"
                         HeightRequest="40"
                         VerticalOptions="Start"
                                          />
                                    <Label Text="{Binding Title}"
                         FontSize="Body"
                         VerticalOptions="End"
                         TextColor="Black"
                         FontAttributes="Bold"
                                         />
                                </StackLayout>
                            </ViewCell>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </StackLayout>
        </ContentPage>
    </MasterDetailPage.Master>
    <MasterDetailPage.Detail>
        <NavigationPage>
            <x:Arguments>
                <page:ListagemDashboard>
                </page:ListagemDashboard>
            </x:Arguments>
        </NavigationPage>
    </MasterDetailPage.Detail>

Após ter definido o Binding dos Icones e Titulo fiz a lógica no codebehind da MasterDetailView, ficando assim:

  public List<MasterPageItem> menuList { get; set; }
        public MasterDetailView()
        {
            InitializeComponent();

            menuList = new List<MasterPageItem>();

            var page1 = new MasterPageItem() { Title = "Faturamento", Icon = "crescimento.png", TargetType = typeof(FaturamentoView) };
            var page2 = new MasterPageItem() { Title = "Ebitda", Icon = "dinheiro.png", TargetType = typeof(EbitdaView) };
            var page3 = new MasterPageItem() { Title = "Menu Principal", Icon = "casa.png", TargetType = typeof(ListagemDashboard) };
            var page4 = new MasterPageItem() { Title = "Faturamento e Ebitda", Icon = "crescimento.png", TargetType = typeof(EbitdaeFaturamentoView) };

            //Adicionando menu items no MenuList
            menuList.Add(page3);
            menuList.Add(page1);
            menuList.Add(page2);
            menuList.Add(page4);
           //Configurando nossa lista para ser a ItemSource da nossa ListView no MasterDetail.xaml
            navigationDrawerList.ItemsSource = menuList;
            //Navegação incial 
            Detail = new NavigationPage((Page)Activator.CreateInstance(typeof(ListagemDashboard)));
        }

        private void OnMenuItemSelected(object sender, SelectedItemChangedEventArgs e)
        {
            var item = (MasterPageItem)e.SelectedItem;
            Type page = item.TargetType;
            Detail = new NavigationPage((Page)Activator.CreateInstance(page));
            IsPresented = false;
        }

E com isso foi possível gerar o Menu com Ícones que navegam para outras páginas , era o resultado que eu esperava no fim das contas :)

Resultado : https://imgur.com/a/sAIszZA

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software