Reputation: 57
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
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
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