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

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

ただいまの
回答率

90.32%

  • C#

    7714questions

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

  • Xamarin

    534questions

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

【Xamarin.Forms】ListViewを使ってタップされたら中身を表示するViewを作りたい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 317

naritamago

score 7

実現したいlこと

Xamarin.Formsで、TODOリストのようなアプリを作成しています。
ローカル保存領域に保存されたテキストファイルを取得してListViewに並べ、項目がタップされたらファイルの中身を表示させたいのですが、うまくいきません。

<ContentPage xmlns=中略>
<ListView ItemSource="{Binding Files}", SelectedItem="{Binding Data}"/>
</ContentPage>
public コンストラクタ()
{
   Files = new ObservableCollection<String>();
   var localFolder = FileSystem.Current.LocalStorage;
   var files = localFolder.GetFileAsync().Result;
   foreach(var file in files)
   {
      Files.Add(file.Name);
   }


上記のViewModelのコードでファイル名を取得してListViewに並べるところまではできたのですが、ファイルの中身を表示させるのにどのような実装にすればよいかわかりません。
項目がタップされたら中身を表示させたいのでSelectedItemを用意していますが、これが正しいかもよく分かっておらず、アドバイスいただきたく思います。

備考

  • ファイルの読み込みにはNugetのPCLStorageを使用しています。
  • PrismのようなMVVMサポートフレームワークは使用していません。
  • Fody.PropertyChangedを使用しています。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

項目がタップされた時に何かしらの処理をしたいのであれば、ListViewItemSelectedイベント、もしくは、ItemTappedイベントを購読するようにします。

ListView の対話機能 - Xamarin | Microsoft Docs

listView.ItemTapped += (sender, e) =>
{
    var data = e.Item;
};

xamlでViewModelのCommandをバインドするには、ここを参考にするか、Prism、もしくは、Xamarin.Forms.BehaviorsPackEventToCommandBehaviorの利用を検討してみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/03 15:02

    f-miyuさん、回答遅れてすいません(ネット環境が壊れてました)。他のteratailの質問も読んだりしてみたのですが、ファイル名をタップ→ファイルの内容を表示する、というような機能の実現は、単一のViewだけでは実装できないor難しいのでしょうか?
    現在は、ご提示いただいたEventToCommandBehaviorを使ってタップされた時に別ページに値を渡して表示する、という実装を考えていますが、単一のページだけで実装する方法があるなら教えていただきたく思います。

    キャンセル

  • 2018/10/03 15:14 編集

    リストのファイル内容を表示するのであれば、別ページに遷移するのが普通だと思いますが、遷移させたくないのであれば、ListViewを非表示にして、ファイル内容のView(Label)を表示状態にするといった感じになるでしょうか。GridやAbsoluteLayoutを使えば、Viewを重ねて表示することが出来ます。

    キャンセル

  • 2018/10/03 16:06

    どういうやり方がベストプラクティスなのかわからなかったので助かります。ListView⇔label切り替えの場合だとファイルの行数が多い場合にちゃんと表示されるのか不安かな?と思います。AbsoluteLayoutの場合もスマホ・タブレット間での表示が不安です。なんにせよタップ時のイベントによるページ切り替えで実装してみようと思います。ご回答ありがとうございました。

    キャンセル

同じタグがついた質問を見る

  • C#

    7714questions

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

  • Xamarin

    534questions

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