2016-05-11 17 views
0

私はdataGridに2つのカラムがあり、それらのカラムに.csファイルの行をdataGrid1.Items.Add()で追加したいとします。dataGrid、datagrid.item.add confusionにアイテムを追加する

私はそれがオブジェクトをとっていることは知っていますが、オブジェクトのどの値を取るかはどのように決定されますか?それはちょうど新しい行をdataGridに入れるためのジェネリッククラスを作成するのが面倒です、これを行う別の方法はありますか?

私は一般的なオブジェクトを持っているので、どのようにして.AddがdataGrid1に名前と年齢を追加するようにしますか?

ジェネリッククラス:

namespace myApp 
{ 
public class generic 
{ 
    private string name; 
    private int age; 

    public generic(string n, int a) 
    { 
     name = n; 
     age = a; 
    } 

    public string getName() 
    { 
     return name; 
    } 
    public int getAge() 
    { 
     return age; 
    } 

} 
} 

私はdataGrid1.Items.Add(new Item("Ann", 21))を試みました。 //空のセルの行を表示します。私はその後、

 DataGridTextColumn nameColumn = new DataGridTextColumn(); 
     DataGridTextColumn ageColumn = new DataGridTextColumn(); 

     nameColumn.Header = "name"; 
     nameColumn.Binding = new Binding("name"); 
     dataGrid1.Columns.Add(nameColumn); 

     ageColumn.Header = "age"; 
     ageColumn.Binding = new Binding("age"); 
     dataGrid1.Columns.Add(ageColumn); 

:私のCSファイルの私の.xamlで

<DataGrid x:Name="dataGrid1" VerticalAlignment="Top" />

:私は、これはより多くの情報のため

編集をどのように動作するかのまわりで私の頭をラップカントクリックするたびに新しい名前と年齢が生成され、それをdataGrid1に追加するというクリック機能があります

+0

DataGrid内のすべてのアイテムが同じタイプで、AutoGenerateColumnsがオンになっている場合は、 'getter'を持つpublicプロパティに基づいてカラムを生成します:' public String Name {get;保護されたセット。 } 'などです。年齢も同じです。次に、DataGridにXAMLを共有して、行の定義方法を確認できるようにすると役に立ちます。 –

+0

DataGridには、コード内にこれらのものをすべて書き込むのではなく、ビューモデルに属するObservableCollectionを設定する必要がありますが、一度に1ステップずつ行うことができます。 –

+0

私は私のポストを編集しました。もっと理にかなっていますか?ありがとう。 'viewmodelに属するobservablecollectionを持つデータグリッドを生成する 'ということに何らかの問題があります。 – user308553

答えて

0

デフォルトでは、DataGridはデータアイテムクラスの各パブリックプロパティの列を生成します(AutoGenerateColumnstrueである必要があります。そうでない場合はXAMLでそれを行います)、それに応じてパブリックプロパティを追加する必要があります。 XAMLで列を定義してがこのgenericクラスのメインビューモデルを作成するのは、手動でItemsに追加するのではなく、1日で作成されていないはずです。

あなたのクラスのこのバージョンでは動作するはずです:

public class generic 
{ 
    public generic(string n, int a) 
    { 
     name = n; 
     age = a; 
    } 

    public string name { get; set; } 
    public int age { get; set; } 
} 

についてのあなたの直感これが「汚い」はフィールドに比較的新しい誰かのために自然であるが、それは誤解です。 「乱雑」とは、すべてのデータをユーザーインターフェイスのコントロールに保存しようとしていることです。このようにコードを書くと、すべてが急速に悪夢に変わります。あなたがする必要があるのは、データ項目にアクセスして何かを行うために、複数行の半冗長コードを書くことです。そうしたやり方は、車のトランクに自分が所有するものをすべて保管しておき、シャワーを浴びた後に裸足で走り回ったり、きれいなフォークが必要なときなどです。もちろん、すべてのロジックがコピーされて1つのイベントハンドラから次のイベントハンドラに貼り付けられ、少し修正されます。

「Rapid Application Development」がVBやDelphiのような環境のホットな話題であった90年代、私はそれを「RAD Syndrome」と呼んでいました。 WPFでは、このようにコードを書くことを推奨していません。実際には最高です。これを考えてみましょう:私が80年代の子供であったときの最初の遭遇時には、構造化プログラミングは私にとって少し恣意的なようでした。オブジェクト指向プログラミングは後で変わったように思われました。しかし、私は彼らと仕事をするのに慣れた後、彼らが非常に有用であることを発見しました。このMVVMのものと同じ種類の取引。

関連する問題