\

Xamarinで変数を次画面に引き継ぐ方法

Xamarinでスマホアプリを開発していると、画面遷移の際に変数の値を表示したいことがあると思います。

この記事では、画面表示のときに変数の値を表示する方法を紹介します。

0. この記事で説明したいこと

ListViewで選択した項目名を、次の画面に表示します。

1. 項目名を表示する画面のコンストラクタに引数を定義する

コンストラクタに引数を定義して、値を取得できるようにします。

TaskNameというラベルに、引数から取得した値を表示するようにしています。

1
2
3
4
5
public TaskTimer(string TodoName)
{
InitializeComponent();
TaskName.Text = TodoName;
}

2. XAMLに項目名を表示するラベルを定義します。

今回は、TaskNameという名前のラベルを定義しました。

1
<Label x:Name="TaskName"></Label>

3. ListViewのItemTappedイベントから画面表示を行う

画面表示はNavigation.PushAsyncを使用します。

TaskTimerという画面にListViewの選択値を表示するには、以下のように書きます。

1
Navigation.PushAsync(new TaskTimer(e.Item.ToString()), true);

4. 以下のように、遷移先の画面に値が表示できれば成功です。

5. ソースコード全文

この記事で紹介したソースコードの全文を記載します。

  • MainPage.xaml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?xml version="1.0" encoding="utf-8"?>
    <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="todotimer.MainPage">
    <StackLayout>
    <Label Text="Todo Timer" HorizontalTextAlignment="Start" FontSize="24" />
    <Label Text="Today's Task" HorizontalTextAlignment="Start" FontSize="24" />
    <ScrollView>
    <StackLayout>
    <ListView x:Name="TopTaskView" ItemTapped="TopTaskView_ItemTapped" HasUnevenRows="False" RowHeight="40">
    </ListView>
    </StackLayout>
    </ScrollView>


    </StackLayout>
    </ContentPage>
  • MainPage.xaml.cs

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Xamarin.Forms;

    namespace todotimer
    {
    public partial class MainPage : ContentPage
    {
    public MainPage()
    {
    InitializeComponent();

    TopTaskView.ItemsSource = new string[]
    {
    "item 1111111111111",
    "item 2222222222222",
    "item 3333333333333",
    };

    }

    void TopTaskView_ItemTapped(System.Object sender, Xamarin.Forms.ItemTappedEventArgs e)
    {
    Navigation.PushAsync(new TaskTimer(e.Item.ToString()), true);

    }
    }
    }
  • TaskTimer.xaml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0" encoding="UTF-8"?>
    <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="todotimer.TaskTimer">
    <ContentPage.Content>

    <StackLayout>
    <Label x:Name="TaskName"></Label>
    </StackLayout>
    </ContentPage.Content>
    </ContentPage>
  • TaskTimer.xaml.cs

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    using System;
    using System.Collections.Generic;

    using Xamarin.Forms;

    namespace todotimer
    {
    public partial class TaskTimer : ContentPage
    {
    public TaskTimer(string TodoName)
    {
    InitializeComponent();
    TaskName.Text = TodoName;
    }
    }
    }

コメントシステムを導入しました!コメント頂けると嬉しすぎて、光の速さで返信します(●´ω`●)

ExecNote.app リリースしました!

ExecNoteは、コードが実行できるMarkdownアプリケーションです。Markdownドキュメント内に記載したコードをクリックすると実行ができます。わざわざターミナルを 起動させる必要がありません!無料ですのでもしよければダウンロードをお願いします。

About Me

11年目のシステムエンジニアです。アプリで生活や仕事を改善したい🐱仕事効率化、自動化のアプリ開発が得意です、ご相談ください。 🚀エンタメ系アプリの開発も模索中🐬社内SEや個人アプリ開発者、システムエンジニアになりたい人と繋がりたい🐱