2012-09-24 70 views
2

添加屬性我有一個List<Data>其中:在運行時

class Data 
{ 
    public string Name { get; set; } 
} 

,並用這個表作爲ListViewItemsSource

ViewListViewGridView一個GridViewColumn(iniltially),並使用我GridViewColumnDisplayMemberBinding綁定屬性Data.Name

在運行時間可以發生,我添加一個新的GridViewColumnGridView,所以我需要的Data一個屬性綁定到這個新列。

我該怎麼做?

與添加的實際屬性數據實例
+1

你會綁定什麼新屬性?數據從哪裏來?有*方法可以做到這一點,涉及到自定義的PropertyDescriptor等 - 但是要提供關於「如何」的建議,需要更多的上下文。 –

+0

@MarcGravell例如新的屬性'public string Surname {get;組; }'。數據可能來自文件。 – Nick

回答

3

不,你不能在運行時添加的「常規」特性 - 坦率地說,爲了什麼你描述的可能要綁定到一個DataTable,並映射數據。你可以在運行時做到這一點,但它非常複雜。 DataTable已經完全實現。

+0

也許這很複雜,但我需要它。我可以在某處找到一些參考/示例嗎? – Nick

+0

@Nick我在這裏有一些SO:你主要在尋找的是ITypedList--以下是winforms,但也應該在wpf中工作:http://stackoverflow.com/questions/4716092/winforms-datagridview-databind-to -an對象上帶有一個一覽特性可變-NUM –

0

解決方案比較複雜,

但也許這些解決方案中的一個就足夠了

您可以使用動態(詳情點擊這裏:dynamics

 dynamic dynamicData = new ExpandoObject(); 
     dynamicData.Name = "Name"; 
     dynamicData.Surname = "SomeSurname"; 

如果你可以重建數據項的集合,你可以使用匿名類型(更多細節anonymous types

 var data = new Data(); 
     string newPropertyName = "Surname"; 
     var data2 = new { Name = data.Name, newPropertyName = "SomeString" }; 

除非您使用DataTemplates綁定到contrete類型的數據。

1

編輯:它看起來像我誤解了這個問題。如果你正在嘗試爲Data課程添加一個屬性,那麼我認爲你運氣不好。如果您已經擁有該財產並且只想將該現有財產綁定到GridView,那麼下面的代碼應該有所幫助。

假設在GridView的DataContext已經設置,你可以在MSDN使用類似的例子東西:

GridViewColumn gvc = new GridViewColumn(); 
gvc.DisplayMemberBinding = new Binding("Surname"); 
gvc.Header = "Surname"; 
gvc.Width = 100; 
myGridView.Columns.Add(gvc);