###前提・実現したいこと
ListViewで選択したセルの内容を後から書き換えたいと思っているのですが、書き換えたいLabelへのアクセス方法がわからず困っています。アドバイスお願いします。
たとえば、Item1と書いてるセルを選択すると表示しているラベルの頭に1文字追加(@Item1)され、さらに選択するとさらにもう1文字(@@Item1)追加されるということをしたいです。
###該当のソースコード
using System; using System.Diagnostics; using System.Collections.Generic; using Xamarin.Forms; namespace XaCurry { public class Test2Page : ContentPage { public Label label; public Test2Page() { var ar = new List<MyCell>(); for (var i = 0; i < 5; i++) { ar.Add(new MyCell { No = i, Text = "Item" + i, }); } var listItems = new ListView { ItemsSource = ar, }; listItems.ItemTemplate = new DataTemplate(() => { var no = new Label(); no.SetBinding(Label.TextProperty, "No"); var text = new Label(); text.SetBinding(Label.TextProperty, "Text"); return new ViewCell { View = new StackLayout { Padding = new Thickness(20, 10, 20, 10), Spacing = 10, Orientation = StackOrientation.Horizontal, Children = { no, text, }, }, }; }); listItems.ItemSelected += async (sender, e) => { bool flag = await DisplayAlert("Alert Title", e.SelectedItem + " is selected.", "OK", "Cancel"); if (flag) { // ここで選択したセル内のラベルを書き換えたい } }; label = new Label { Text = "Label", }; var button = new Button { Text = "Button", }; button.Clicked += (sender, e) => { Navigation.PushAsync(new Test3Page(this)); }; Content = new StackLayout { Children = { listItems, label, button, } }; } } public class MyCell { public int No { get; set; } public string Text { get; set; } } public class Test3Page : ContentPage { public Test3Page(Test2Page test2) { var button = new Button { Text = "change", }; button.Clicked += (sender, e) => { test2.label.Text = "change"; }; Content = new StackLayout { Children = { button, } }; } } }
###試したこと
おそらく、listItems.ItemSelected時の処理の中で
sender または e または listItemsあたりからたどれそうな気はするのですが、自力ではわかりませんでした。
実際は、button, label, Test3Pageでやっているようにbuttonを押すと次のページへ遷移し、遷移したページの操作によって、親のページの内容が変わっているということをしたいのですが、上記のアクセス方法がわかればそこは解決できると思っています。
###補足情報(言語/FW/ツール等のバージョンなど)
Xamarin 6.3(build 864)
Mac Note Pro
OS X Yosemite(10.10.5)
###追記コード
using System; using System.Diagnostics; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using Xamarin.Forms; namespace XaCurry { public class Test2Page : ContentPage { public Test2Page() { var ar = new List<MyCell>(); for (var i = 0; i < 5; i++) { ar.Add(new MyCell { No = i, Text = "Item" + i, }); } MakePage(ar); } public void MakePage( List<MyCell> ar ) { var listItems = new ListView { ItemsSource = ar, }; listItems.ItemTemplate = new DataTemplate(() => { var no = new Label(); no.SetBinding(Label.TextProperty, "No"); var text = new Label(); text.SetBinding(Label.TextProperty, "Text"); return new ViewCell { View = new StackLayout { Padding = new Thickness(20, 10, 20, 10), Spacing = 10, Orientation = StackOrientation.Horizontal, Children = { no, text, }, }, }; }); listItems.ItemSelected += async(sender, e) => { bool flag = await DisplayAlert("Alert Title", e.SelectedItem + " is selected.", "OK", "Cancel"); if (flag) { // ここで選択したセル内のラベルを書き換えたい var i = ar.IndexOf(((MyCell)e.SelectedItem)); ar[i].Text = "@" + ar[i].Text; MakePage(ar); } }; Content = new StackLayout { Children = { listItems, } }; } } public class MyCell { public int No { get; set; } public string Text { get; set; } } }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/12 03:36