0

wpf アプリケーションでデータグリッド (ドラッグ アンド ドロップ) を作成しました。次に、プロパティ ウィンドウを使用して列を手動で追加しました。

コードビハインドを使用して、このデータグリッドに行を追加したいと考えています。私はあなたが作るだろうと思っただろう

DataGridRow row = new DataGridRow();

次に、Items.Add() または何かを使用して、値 (各列に 1 つ) を追加します。

見てないのでどうしようかなと思ってます。

私はデータバインディングなどのようにする必要があることを知っていますが、wpf は初めてで、迅速で汚いアプリケーションを作成しています。むしろ、forloop を使用して行を手動で作成します。

私もその欲求を感じたら、むしろ戻ってその領域をリファクタリングします。私は本当に自分が作って実行しているものを望んでいるので、それをaspで使用できます。

4

1 に答える 1

1

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% の精度を得るのは簡単ではありません)。

于 2012-07-23T23:36:31.383 に答える