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

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

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

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

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

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

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

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

public TaskTimer(string TodoName)
{
    InitializeComponent();
    TaskName.Text = TodoName;
}

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

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

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

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

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

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

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

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

5. ソースコード全文

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

  • MainPage.xaml
<?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
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
<?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
using System;
using System.Collections.Generic;

using Xamarin.Forms;

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

コメント

タイトルとURLをコピーしました