Reputation: 24572
I have this XAML:
<TableSection Title="Card Activity">
<TextCell Text="English" StyleId="disclosure" Tapped="openEnglishScorePage"/>
<TextCell Text="Romaji" StyleId="disclosure" Tapped="openRomajiScorePage"/>
<TextCell Text="Kana" StyleId="disclosure" Tapped="openKanaScorePage"/>
<TextCell Text="Kanji" StyleId="disclosure" Tapped="openKanjiScorePage"/>
</TableSection>
In my .cs I have this:
void openEnglishScorePage(object sender, EventArgs e)
{
Navigation.PushAsync(new EnglishScorePage());
}
void openKanaScorePage(object sender, EventArgs e)
{
Navigation.PushAsync(new KanaScorePage());
}
void openKanjiScorePage(object sender, EventArgs e)
{
Navigation.PushAsync(new KanjiScorePage());
}
void openRomajiScorePage(object sender, EventArgs e)
{
Navigation.PushAsync(new RomajiScorePage());
}
Is there some way that I could replace the four .cs methods with just one and in the XAML call this method with a parameter?
Upvotes: 0
Views: 108
Reputation: 1538
Yes you can, i'll show you some example code that I used: My XAML code
<StackLayout Orientation="Horizontal" HorizontalOptions="Center" x:Name="sizestack">
<local:CustomImageButton WidthRequest="120" Clicked="buttonMenu_Clicked" Margin="0,0,-10,0" Image="eigendommen.png" ClassId="Eigendommen" x:Name="buttonGebouwen" HeightRequest="120"/>
<local:CustomImageButton WidthRequest="120" x:Name="buttonHuurcontract" Clicked="buttonMenu_Clicked" ClassId="Huurcontracten" Image="huurcontracten.png" HeightRequest="120" />
</StackLayout>
<StackLayout Orientation="Horizontal" HorizontalOptions="Center">
<local:CustomImageButton WidthRequest="120" Margin="0,-15,-10,0" Clicked="buttonMenu_Clicked" Image="eigenaarshuurders.png" ClassId="Eigenaars" x:Name="buttonEigenaars" TextColor="White" HeightRequest="120" />
<local:CustomImageButton WidthRequest="120" Margin="0,-15,0,0" Clicked="buttonMenu_Clicked" Image="leveranciers.png" ClassId="Leveranciers" x:Name="buttonLeveranciers" HeightRequest="120" />
</StackLayout>
<StackLayout Orientation="Horizontal" HorizontalOptions="Center">
<local:CustomImageButton WidthRequest="120" Margin="0,-15,-10,0" Clicked="buttonMenu_Clicked" Image="meldingen.png" ClassId="AnnouncementPage" x:Name="buttonMeldingen" HeightRequest="120" />
<local:CustomImageButton WidthRequest="120" Margin="0,-15,0,0" Image="taken.png" x:Name="buttonTaken" ClassId="Taken" Clicked="buttonMenu_Clicked" TextColor="White" HeightRequest="120" />
</StackLayout>
In every CustomImageButton I have an event calledbuttonMenuClicked. Also note that I filled up the classId. I did this so I can decide to which page to go.
My code behind:
private void buttonMenu_Clicked(object sender, EventArgs e)
{
string naam = ((Button)(sender)).ClassId;
Page navPage = new Page();
switch (naam)
{
case "Eigendommen":
navPage = new Gebouwen() {Title = "Eigendommen" };
break;
case "Leveranciers":
navPage = new Leveranciers() { Title = "Leveranciers" };
break;
case "Eigenaars":
navPage = new Eigenaars() { Title = "Eigenaars/Huurders" };
break;
case "Taken":
navPage = new TakenPage() { Title = "Taken" };
break;
case "Huurcontracten":
navPage = new HuurcontractenPage() { Title = "Huurcontracten" };
break;
default:
navPage = new AnnouncementPage(id) { Title = "Meldingen" };
break;
}
var app = Application.Current as App;
var mainPage = (MenuPage)app.MainPage;
mainPage.SelectMenuNewItem(navPage.Title);
mainPage.Detail = new NavigationPageBar(navPage);
}
So here I request the classid so I can decide to which page to go. Ask questions if you unsure about something ;)
Upvotes: 1