Ranjit Kumar
Ranjit Kumar

Reputation: 57

How to open master detail menu from another content page button click?

I want to open master details menu from another content page button click event? so how to do this in xamarin forms?

Upvotes: 1

Views: 2841

Answers (2)

meninomiel
meninomiel

Reputation: 19

On the page that you want to open the Drawler Menu, you have to set the "Message Send" on Click Event or whatever you want. In my case, I set this in a image tapped event.

public void ToggleDrawer(object sender, System.EventArgs e)
{
  MessagingCenter.Send(EventArgs.Empty, "OpenMenu");
}

Now, on the MasterDetailPage (Mainpage.xaml.cs in my case) you have to put a Message Subscribe on that page above InitializeComponent().

MessagingCenter.Subscribe<EventArgs>(this, "OpenMenu", args =>
{
   IsPresented = !IsPresented;
});

That works to me.

Upvotes: 2

Dmitry Zinoviev
Dmitry Zinoviev

Reputation: 588

You can open menu page by setting MasterDetailPage.IsPresented to true.

Simple way to do this is MessagingCenter. To MasterDetailPage add MessagingCenter.Subscribe and in your VM add MessagingCenter.Send

Example

public class MenuPage : ContentPage
{
    public MenuPage()
    {
        Title = "Test";
        Content = new StackLayout
        {
            Children = {
                new Label { Text = "Welcome to Xamarin.Forms!" }
            }
        };
    }
}

public class DetailPage : ContentPage
{
    public DetailPage()
    {
        var button = new Button()
        {
            Text = "Menu"
        };
        button.Clicked += Button_Clicked;
        Content = new StackLayout
        {
            Children = {
                button
            }
        };
    }

    private void Button_Clicked(object sender, EventArgs e)
    {
        MessagingCenter.Send(EventArgs.Empty, "OpenMenu");
    }
}


public partial class App : Application
{
    public App()
    {
        InitializeComponent();

        var masterDetailPage = new MasterDetailPage();
        masterDetailPage.Master = new MenuPage();
        masterDetailPage.Detail = new NavigationPage( new DetailPage());
        MainPage = masterDetailPage;
        MessagingCenter.Subscribe<EventArgs>(this, "OpenMenu", args =>
        {
            masterDetailPage.IsPresented = true;
        });

    }
}

Upvotes: 4

Related Questions