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

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

新規登録して質問してみよう
ただいま回答率
85.51%
Xamarin

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

Q&A

解決済

3回答

8737閲覧

Xamarin.FormsのListViewの項目選択についての質問です。

退会済みユーザー

退会済みユーザー

総合スコア0

Xamarin

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

0グッド

0クリップ

投稿2016/08/20 15:00

編集2016/08/21 03:31

###実現したいこと
Xamarin初心者です。
Xamarin.FormsでListViewがタップされた場合、どの項目が選択されたかを変数に入れた後、確認するプログラムを書きたいのですが、どのように書けばいいですか?

自身がよくXAMLについて分かっていないので、できればXAMLは使わず、C#だけで書きたいです。

###追記
皆さま丁寧にご回答いただきありがとうございます。
どの回答も丁寧にされていたのですが、その中でもTak1waさんの回答が自身一番わかりやすかったので、ベストアンサーとしました。

皆さまこれらからもよろしくお願いします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

こんにちは。

質問者さんがMVVMを導入しているのかはわからないので、
コードビハインドで取得する方法も載せておきます。

いくつかListViewで選択時のイベントがあると思うんですが、それをハンドルするとイベント引数に選択項目が格納されていたりします。

C#

1public partial class MainPage : ContentPage 2{ 3 public MainPage() 4 { 5 //InitializeComponent(); 6 var list = new ListView 7 { 8 ItemsSource = new string[] 9 { 10 "AAA", "BBB", "CCC" 11 } 12 }; 13 list.ItemTapped += List_ItemTapped; 14 15 Content = list; 16 } 17 18 private void List_ItemTapped(object sender, ItemTappedEventArgs e) 19 { 20 DisplayAlert("tapped", e.Item.ToString(), "OK"); 21 } 22}

投稿2016/08/21 02:37

Tak1wa

総合スコア4791

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

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

0

XAML部分をC#に翻訳するとこんな感じですね。

public MainPage () { BindingContext = new MainPageViewModel (); var listView = new ListView { HorizontalOptions = LayoutOptions.FillAndExpand, VerticalOptions = LayoutOptions.FillAndExpand, }; listView.SetBinding (ListView.ItemsSourceProperty, "Colors"); listView.SetBinding (ListView.SelectedItemProperty, "SelectedColor"); Content = listView; }

投稿2016/08/21 00:16

P3PPP

総合スコア359

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

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

0

最も簡単なのは、ListViewのSelectedItemプロパティに対して、ViewModelのプロパティをバインドし、ViewModelのバインドしたプロパティのsetをフックすることだと思います。
具体的なサンプルを以下に示します。

まずはXAML側のコードです。

xaml

1<?xml version="1.0" encoding="utf-8" ?> 2<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 3 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 4 xmlns:local="clr-namespace:ListViewSample" 5 x:Class="ListViewSample.MainPage"> 6 <ContentView.BindingContext> 7 <local:MainPageViewModel/> 8 </ContentView.BindingContext> 9 <ListView ItemsSource="{Binding Colors}" SelectedItem="{Binding SelectedColor}"/> 10</ContentPage>

MainPageのBindingContextに対して、MainPageViewModelというクラスのインスタンスを新たに生成してバインドしています。
そしてListViewには、そのMainPaggeViewModelのColorsというプロパティの値バインドすることでリスト表示しています。
同様にListViewのSelectedItemsというプロパティに、MainPageViewModelのSelectedColorというプロパティをバインドしています。

MainPageViewModel側を見てみましょう。

cs

1 public class MainPageViewModel 2 { 3 public IList<string> Colors { get; } = new List<string> { "Red", "Blue", "Green" }; 4 private string _selectedColor; 5 public string SelectedColor 6 { 7 set { _selectedColor = value; } 8 } 9 }

こんな感じです。
実行すると、ListViewには、「Red」「Blue」「Green」と表示されます。
リストビューで項目が選択されると、SelectedColorのsetのvalueとして選択された値が渡されてきますので、そこで必要な処理を記載したら良いのではないでしょうか?

Githubにサンプルのコードを上げておきますので、よかったら参照ください。
https://github.com/nuitsjp/XamarinSamples/tree/master/ListViewSample

投稿2016/08/20 15:45

nuits.jp

総合スコア346

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

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

退会済みユーザー

退会済みユーザー

2016/08/20 16:11

迅速かつ御丁寧な解答ありがとうございます。 一部言い忘れていたことがありました。すみません。 質問の更新を行った通り、できればXAMLは使わずC#のみで書きたいのですが、どのようにすれば書けますか。 宜しくお願いします。
nuits.jp

2016/08/21 01:54

C#方式については、P3PPPさんが回答くださっていますので、そちらをごらんください。 XAMLと同等の内容をC#で記述してくださっています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問