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. 以下のように、遷移先の画面に値が表示できれば成功です。
ListViewの選択値を次画面に引き継ぎできたぜ。
なかなか、たのしい。 pic.twitter.com/mya0SPMfk9
— はる🐱 (@Harus0313) November 11, 2020
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;
}
}
}
コメント