1 つの行は 1 つのオブジェクトであり、値はそのオブジェクトのプロパティです。コンテナ ( DataGridRow
) を自分で作成しないでください。 が作成DataGrid
してくれます。データ オブジェクトをItems
(または ItemsSource として設定されたコレクション、実装する必要がありますINotifyCollectionChanged
(例: ObservableCollection<T>
)) に直接追加するだけです。列は、データ オブジェクトのプロパティをバインドする必要があります。既定では、列はデータから自動的に作成されます。
コメントへの応答: を使用するDisplayNameAttribute
と、ヘッダーからスペースを簡単に取り除くことができますが、問題のあるすべてのプロパティに属性を追加する必要があります。
[DisplayName("Full Name")]
public string FullName { get; }
次に、購読してDataGrid.AutoGeneratingColumn
ください(-ああ、ドキュメントにはこの問題のハックな解決策があります-):
private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
var descriptor = (MemberDescriptor)e.PropertyDescriptor;
//Takes the value from the attribute if exists & non-default-value, else property name.
e.Column.Header = descriptor.DisplayName;
}
難しい方法は、既存のヘッダー文字列を正しく分割するアルゴリズムです (パスカルの大文字と小文字、数字、および略語を考慮する必要があり、おそらく 100% の精度を得るのは簡単ではありません)。