2016-05-11 81 views
0

我有一個dataGrid其中有兩列,我想在我的.cs文件中使用dataGrid1.Items.Add()將行添加到它們。添加項到dataGrid,datagrid.item.add混淆

我知道它需要一個對象,但它如何確定要採取的對象中的哪個值?僅僅爲了將新行放入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)); //顯示一排空單元格。我只是不能換我的頭周圍這是如何工作

更多信息編輯:

在我的.xaml

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

在我的CS文件:

 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); 

然後我有一個點擊功能,每當點擊會產生一個新的名字和年齡,然後將它添加到dataGrid1

+0

如果DataGrid中的所有項目都是相同的類型,並且AutoGenerateColumns已打開,它將根據其具有'getter'的公共屬性生成列:public String Name {get;保護組;例如''。與年齡相同。那麼,如果你可以分享你的DataGrid的XAML,那麼我們可以看到你是如何定義行的。 –

+0

您應該使用屬於viewmodel的ObservableCollection填充DataGrid,而不是在後面的代碼中編寫所有這些東西,但我們可以一次完成這一步。 –

+0

我編輯了我的帖子以獲取更多信息。它更有意義嗎?謝謝。 我有一些麻煩理解'用observablecollection填充datagrid屬於viewmodel'。 – user308553

回答

0

默認情況下,DataGrid將爲數據項目類別中的每個公共屬性生成一列(AutoGenerateColumns應爲true;如果沒有,請在XAML中這樣做),因此您需要相應地添加公共屬性。您應該在XAML中定義您的列,然後創建一個包含generic類的ObservableCollection的主視圖模型,而不是將它們手動添加到Items,但羅馬不是一天建成的。

這個類的版本應該工作:

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

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

你的直覺這個是「混亂」是很自然的人相對較新的領域,但它是錯誤的。什麼是「雜亂」是試圖將所有數據存儲在用戶界面控件中。當你用這種方式編寫代碼時,一切都會迅速變成噩夢。您需要做的每件事都需要寫出多行半冗餘代碼才能獲取數據項並對其執行任何操作。這種做事方式就像將你擁有的所有東西存放在你的汽車後備箱中,然後在洗完澡後或在你需要乾淨的叉子時在街上赤身裸體地跑出去。自然,所有的邏輯都被複制並從一個事件處理程序粘貼到下一個,然後稍作修改。

早在90年代,當「快速應用程序開發」成爲VB或Delphi等任何環境的熱門流行語時,我就稱之爲「RAD綜合症」。 WPF不鼓勵你用這種方式編寫代碼,而這實際上是最好的。以這種方式思考:80年代我小時候第一次遇到它時,對我來說,結構化編程似乎有點武斷,而面向對象的編程在後來似乎很奇怪。但在我習慣與他們合作後,我發現他們非常有用。與MVVM相同的處理方式。