您可以使用DisplayNameAttribute並更新您的代碼的一部分來實現您想要的。
你必須做的第一件事是,增加了[DisplayName("")]
在客戶端類的屬性。
public class Client {
[DisplayName("Column Name 1")]
public String name {set; get;}
[DisplayName("Clain Number")]
public String claim_number {set; get;}
}
更新您的xaml代碼,將事件處理程序添加到AutoGenerationColumn事件中。
<dg:DataGrid AutoGenerateColumns="True" AutoGeneratingColumn="OnAutoGeneratingColumn">
</dg:DataGrid>
最後,在代碼隱藏中添加一個方法。
private void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
var displayName = GetPropertyDisplayName(e.PropertyDescriptor);
if (!string.IsNullOrEmpty(displayName))
{
e.Column.Header = displayName;
}
}
public static string GetPropertyDisplayName(object descriptor)
{
var pd = descriptor as PropertyDescriptor;
if (pd != null)
{
// Check for DisplayName attribute and set the column header accordingly
var displayName = pd.Attributes[typeof(DisplayNameAttribute)] as DisplayNameAttribute;
if (displayName != null && displayName != DisplayNameAttribute.Default)
{
return displayName.DisplayName;
}
}
else
{
var pi = descriptor as PropertyInfo;
if (pi != null)
{
// Check for DisplayName attribute and set the column header accordingly
Object[] attributes = pi.GetCustomAttributes(typeof(DisplayNameAttribute), true);
for (int i = 0; i < attributes.Length; ++i)
{
var displayName = attributes[i] as DisplayNameAttribute;
if (displayName != null && displayName != DisplayNameAttribute.Default)
{
return displayName.DisplayName;
}
}
}
}
return null;
}
來源
2012-11-27 07:31:08
Ekk
如果你需要做的唯一定製是頭重命名和你不怕額外的事件處理程序 - EKK的答案是要走的路。 但是,如果定製其他任何東西(單元格模板,列要顯示)甚至有一點可能性,最好明確列出狀態最近,如果類似的要求會提高,您將被迫重寫代碼或添加類似構造來編輯/重新創建自動生成的列 – Nogard
謝謝,這是有道理的。鑑於我可能會做更多的定製,我可能會手動添加每一列。 – jmulmer