1usingSystem.Windows;2usingSystem.Windows.Controls;3usingSystem.Windows.Data;45namespaceQ176289;67publicclassEx8{9publicstring? A {get;set;}10publicstring? B {get;set;}11publicList<string?>? C {get;set;}12}1314publicpartialclassMainWindow:Window15{16privateList<Ex> exl;17privateint maxCcount;1819publicMainWindow()20{21InitializeComponent();2223 exl =[24new(){ A ="A1", B ="B1",},25new(){ A ="A2", B ="B2", C =["C2-1","C2-2",],},26new(){ A ="A3", B ="B3", C =["C3-1","C3-2","C3-3",],},27];2829// 最大のCの個数30 maxCcount = exl.Max(x => x.C?.Count ??0);3132// C列カラム作成33for(var i =0; i < maxCcount; i++)34{35var col =newDataGridTextColumn36{37 Binding =newBinding($"C[{i}]"),38 Header =$"C-{i +1}",39 Width =100,40};41 dgex.Columns.Add(col);42}43 dgex.ItemsSource = exl;444546// 編集時の対策(編集しないならいらない)47foreach(var ex in exl)48{49// CがnllだったらmaxCcount個数分のリストを作成50 ex.C ??=new(newstring[maxCcount]);51// 個数が足りなかったら追加52if(ex.C.Count < maxCcount) ex.C.AddRange(newstring[maxCcount - ex.C.Count]);53}5455// 行の追加時の対策(追加しないならいらない)56 dgex.AddingNewItem += DataGrid_AddingNewItem;57}5859privatevoidDataGrid_AddingNewItem(object? sender,AddingNewItemEventArgs e)60{61// 行の追加時にmaxCcount個数分のリストを用意62 e.NewItem =newEx{ C =new(newstring[maxCcount]),};63}64}