トップ回答者
DataGrid.ItemsSourceへの不定件数のデータバインディングについて

質問
-
先月よりWPFとC#にて開発の勉強を始めた者です。よろしくお願いいたします。
DataGridにデータをバインドする場合に以下のような例をたくさん見かけます。
この場合はデータの数が3件の場合ですがその数が不特定の場合はどのように処理するのでしょうか?
[Person.cs]
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public int Gender { get; set; } // 0 = default, 1 = male, 2 = female
public Person(string name, int age, int gender)
{
this.Name = name;
this.Age = age;
this.Gender = gender;
}
}
[Form.cs]
Person[] persons = {
new Person("Tanaka", 24, 1),
new Person("Yamada", 22, 1),
new Person("Wannabe", 21, 2),
};
DataGrid1.ItemsSource = persons;
以下のような17桁で繰り返すテキストを読み出しながら処理する場合などです。
[Person.txt]
Tanaka 24 1Yamada 22 1Wannabe 21 2Kawakami 23 2
テキストの全内容をstLineとした場合、最初の『Tanaka』から読み出すと
int i = new int();
string rName = stLine.Substring(0 + (17 * i), 10).Trim();
int rAge = int.Parse(stLine.Substring(10 + (17 * i), 3);
int rGender = int Parse(stLine.Substring(16 + (17 * i), 1):
のような処理で順序に取得することができると思いますがこれを
DataGrid1.ItemsSourceに取り込む方法がわかりません。
テキストの内容は常に変動し、件数が変化するものとします。
以上、よろしくお願いいたします。
回答
-
Person型の配列を作るのではなく、コレクションにPsersonを入れて管理すると良いです。
コレクションはWPFではよくObservableCollectionが使われます。これは、コレクションの変化を通知する機能があらかじめ実装されているからです。
例えば次のような感じになります。
var persons = new ObservableCollection<Person>(); persons.Add(new Person("Tanaka", 24, 1)); persons.Add(new Person("Yamada", 22, 1)); persons.Add(new Person("IWannabe", 21, 2));
実際にはPerson.txtを読みながら、Addメソッドで追加していって下さい。★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 回答の候補に設定 栗下 望Microsoft employee, Moderator 2016年12月19日 8:44
- 回答としてマーク NanoSuzuGG 2016年12月19日 23:10
すべての返信
-
Person型の配列を作るのではなく、コレクションにPsersonを入れて管理すると良いです。
コレクションはWPFではよくObservableCollectionが使われます。これは、コレクションの変化を通知する機能があらかじめ実装されているからです。
例えば次のような感じになります。
var persons = new ObservableCollection<Person>(); persons.Add(new Person("Tanaka", 24, 1)); persons.Add(new Person("Yamada", 22, 1)); persons.Add(new Person("IWannabe", 21, 2));
実際にはPerson.txtを読みながら、Addメソッドで追加していって下さい。★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 回答の候補に設定 栗下 望Microsoft employee, Moderator 2016年12月19日 8:44
- 回答としてマーク NanoSuzuGG 2016年12月19日 23:10