Alan2
Alan2

Reputation: 24572

How can I send a parameter with the Xamarin.forms TextCell Tapped?

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

Answers (1)

Jordy Dieltjens
Jordy Dieltjens

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

Related Questions