2010-08-25 106 views
4
<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
    <DataGridTextColumn Header="First Name" Binding="{Binding FirstName}" /> 
    </DataGrid.Columns> 
</DataGrid> 

在上面的代碼片段中,DataGrid列在XAML中被硬編碼。在WPF DataGrid中動態生成列?

是否有可能在其他地方定義列定義,理想情況下是在MVVM視圖模型中定義,以便可以實時定義和重新定義列?

回答

0

當然是有可能的。

我沒有想過它超過5秒,但這裏是你如何做到這一點: 1.定義一個附加屬性到數據網格,當設置爲true時,你將註冊到網格加載事件,當事件觸發時,你將從發送者參數中提取他的上下文,而不是發送給他一個填充列的方法。

3

以下列方式使用Microsoft DataGrid和MVVM模式適用於我,因爲DataGrid會根據DataTable自動生成列。

在XAML我包括DataGrid

<WpfToolkit:DataGrid 
    ItemsSource="{Binding Path=GridData, Mode=OneWay}" > 
</WpfToolkit:DataGrid> 

在我看來,我的模型揭露DataView

public DataView GridData 
{ 
    get 
    { 
    DataSet ds = new DataSet("MyDataSet"); 

    // everything hard-coded for this example 
    int to = 12; 
    int ps = 2048; 
    string sv = "10"; 
    string st = "Open"; 
    string wsid = "ZAMBONI"; 

    DataTable dt = new DataTable("MyDataTable"); 
    DataColumn propertyName = new DataColumn("Property"); 
    DataColumn propertyValue = new DataColumn("Value"); 
    dt.Columns.Add(propertyName); 
    dt.Columns.Add(propertyValue); 
    dt.Rows.Add("Connection timeout", to); 
    dt.Rows.Add("Packet size", ps); 
    dt.Rows.Add("Server version", sv); 
    dt.Rows.Add("State", st); 
    dt.Rows.Add("Worksation id", wsid); 
    ds.Tables.Add(dt); 

    return ds.Tables[0].DefaultView; 
    } 
}