質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

1回答

2543閲覧

ListViewから都道府県を選択後、都道府県の情報を通知したい

katounaoyuki09

総合スコア11

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2016/12/07 14:00

編集2022/01/12 10:55

会員登録画面から都道府県選択画面に遷移し
都道府県を選択後、画面を閉じると同時に都道府県の情報を通知したいのですが
普段iOSの開発をしていますのでDelegateもしくはブロック構文に代わるものがあるかと思いますが。。。
C#の文法自体慣れていませんのでご教授お願い致します。

イメージ説明
会員登録画面(MainPage.xaml.cs)

C#

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6using Xamarin.Forms; 7 8namespace CleaningSuppliesReview 9{ 10 public partial class MainPage : ContentPage 11 { 12 public MainPage() 13 { 14 InitializeComponent(); 15 16 this.buttonPrefectures.Clicked += tappedButtonPrefectures; 17 } 18 19 private void tappedButtonPrefectures(object sender, EventArgs e) 20 { 21 // 都道府県選択画面へ遷移する 22 PrefecturesListPage page = new PrefecturesListPage(); 23 ParentView.Navigation.PushAsync(page); 24 } 25 } 26}

イメージ説明
都道府県選択画面(PrefecturesListPage.xaml.cs)

C#

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6 7using Xamarin.Forms; 8 9namespace CleaningSuppliesReview 10{ 11 public delegate void prefecturesDelegate(String prefectures); 12 public partial class PrefecturesListPage : ContentPage 13 { 14 public PrefecturesListPage() 15 { 16 InitializeComponent(); 17 18 String[] dataSource = getPrefecturesDataSource(); 19 this.PrefecturesList.ItemsSource = dataSource; 20 this.PrefecturesList.ItemTapped += tappedSelectPrefectures; 21 } 22 23 public String[] getPrefecturesDataSource() 24 { 25 String[] dataSource = new String[] { "北海道", "東京", "沖縄" }; 26 return dataSource; 27 } 28 29 static void tappedSelectPrefectures(object sender, ItemTappedEventArgs e) 30 { 31 //都道府県選択後MainPage.xaml.csに通知させる 32 } 33 } 34}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Delegateもしくはブロック構文に代わるもの

これ自体は、C#にも類似したものはあります。

  • デリゲート
  • ラムダ式
  • 匿名メソッド

ただし、今回は画面遷移を挟んでいるようなので解決することは難しいと思います。
(できるように全体アーキテクチャとして作りこむことは可能でしょうけど)

今回のケースでは画面(Page)をまたがっているように見えます。
この場合
0. どこかに画面間で共有できるオブジェクトを保持し、そこで選択状態を持たせる方法
0. 画面遷移のパラメーターとして渡す方

の二つのアプローチがあります。
画面の戻る処理で2.をやるのはちょっと労力が多いので、ここでは1.で説明します。

この場合、選択肢として

  • 簡単だけどあまり良くない設計
  • 良い設計だけど、必要知識が増えまくる方法

の二つがあると思います。
前者は、Appクラスのstaticプロパティや、シングルトンパターンを利用したクラスを作成して、そこに状態を保持しておくことです。
この方法は、複数人で開発するプロダクションコードではあまりお勧めできません。
個人開発の範囲であれば、好き嫌いはありますが、押し通せない事はないと思います。

後者はここでは詳細は割愛しますが、DIコンテナ・MVVMパターンなどを適用し、Modelに該当するクラスで状態を共有する方法です。
Xamarin.Formsであれば、Prism for Xamarin.Formsなどを利用するのが良いと思いますが、初期学習段階であるとした場合、やり過ぎだと思います。
公式サイト
https://github.com/PrismLibrary/Prism
日本語解説情報(手前ミソであれですが)
http://www.nuits.jp/entry/2016/08/22/173858

投稿2016/12/08 00:48

nuits.jp

総合スコア346

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問