実現したいこと
Xamarin.FormsでListViewを動的に作成したい。
前提
ListViewの列を可変にする必要があり、その前段としてListViewをコードで作成しようとしています。
発生している問題・エラーメッセージ
実行すると、ItemsSourceにセットしたデータが正しく表示されない。
10行のデータをセットすると、1~9行まで同じ値が表示される。
該当のソースコード
Xaml
1 <ContentPage.Content> 2 <ListView x:Name="listData" ItemsSource="{Binding listviewItems}"> 3 <ListView.ItemTemplate> 4 <DataTemplate> 5 <ViewCell> 6 </ViewCell> 7 </DataTemplate> 8 </ListView.ItemTemplate> 9 </ListView> 10 </ContentPage.Content>
C#
1 public class gridData 2 { 3 public int rownum { get; set; } 4 public string item1 { get; set; } 5 public string item2 { get; set; } 6 } 7 8 public List<gridData> GetData() 9 { 10 List<gridData> lst = new List<gridData>(); 11 12 for (int i = 0; i < 10; i++) 13 { 14 lst.Add(new gridData() 15 { 16 rownum = i + 1, 17 item1 = "item1-" + i.ToString(), 18 item2 = "item2-" + i.ToString(), 19 }); 20 } 21 return lst; 22 } 23 24 public Page1() 25 { 26 InitializeComponent(); 27 28 // テンプレートを初期化 29 this.BasicGridPageCS(); 30 } 31 32 protected async override Task<bool> OnAppearingFirstCallOnly() 33 { 34 List<gridData> lst = GetData(); 35 this.listData.ItemsSource = lst; 36 return true; 37 } 38 39 public void BasicGridPageCS() 40 { 41 Grid grid = new Grid 42 { 43 Padding = new Thickness(0, 0, 0, 0), 44 RowSpacing = 1, 45 ColumnSpacing = 1, 46 RowDefinitions = 47 { 48 new RowDefinition { Height = new GridLength(0.1, GridUnitType.Star) }, 49 }, 50 ColumnDefinitions = 51 { 52 new ColumnDefinition { Width = new GridLength(0.050, GridUnitType.Star) }, 53 new ColumnDefinition { Width = new GridLength(0.050, GridUnitType.Star) }, 54 new ColumnDefinition { Width = new GridLength(0.130, GridUnitType.Star) }, 55 }, 56 }; 57 58 grid.Children.Add(getLabelDetail("rownum", LayoutOptions.EndAndExpand), 0, 0); 59 grid.Children.Add(getLabelDetail("item1", LayoutOptions.StartAndExpand), 1, 0); 60 grid.Children.Add(getLabelDetail("item2", LayoutOptions.StartAndExpand), 2, 0); 61 62 DataTemplate dataTemplate = new DataTemplate(() => { 63 return new ViewCell() { View = grid }; 64 }); 65 this.listData.ItemTemplate = dataTemplate; 66 } 67 private Label getLabelDetail(string bind, LayoutOptions layoutH) 68 { 69 Label lbl = new Label(); 70 lbl.BackgroundColor = Color.Transparent; 71 lbl.FontSize = MbStdFontSize.Small; 72 lbl.TextColor = Color.Black; 73 lbl.HorizontalOptions = layoutH; 74 lbl.VerticalOptions = LayoutOptions.Center; 75 lbl.Margin = new Thickness(1, 0, 1, 0); 76 lbl.SetBinding( 77 Label.TextProperty, 78 bind, 79 BindingMode.OneWay, 80 null, 81 null); 82 return lbl; 83 }
試したこと
https://learn.microsoft.com/ja-jp/xamarin/xamarin-forms/user-interface/layouts/grid
このページを見てGRIDを作りました。
バインドがうまくできていないと思うのですが。。。
lbl.SetBinding()では、各行の値にバインドできないのでしょうか?

回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。