2012-10-27 84 views
0

我有一個DataGrid,這勢必下面的窗口和模型類:爲什麼顯示被忽略?

public partial class AttributesWindow 
    { 
     public ObservableCollection<AttributesModel> ItemsSource { get; set; } 

     private readonly List<string> _fields = new List<string>(new[] { "Test1", "Test2" }); 
     public ObservableCollection<AttributesModel> itemsSource { get; set; } 
     private DatabaseTable parentDatabaseTable = null; 

     public AttributesWindow(DatabaseTable parentDatabaseTable) 
     { 
      this.parentDatabaseTable = parentDatabaseTable; 
      InitializeComponent(); 
      DataContext = this; 
      itemsSource = new ObservableCollection<AttributesModel>(_fields.Select(f => new AttributesModel(f))); 
     } 
    } 

public class AttributesModel 
    { 
     public string Field { get; private set; } 

     [Display(Name = "Sort Order")] 
     public SortOrder SortBy { get; set; } 

     [Display(Name = "Group By")] 
     public string GroupBy { get; set; } 

     [Display(Name = "Having")] 
     public string Having { get; set; } 

     [Display(Name = "Display Order")] 
     public string DisplayOrder { get; set; } 

     [Display(Name = "Aggregate By")] 
     public Aggregate AggregateBy { get; set; } 

     public enum Aggregate 
     { 
      None, 
      Sum, 
      Minimum, 
      Maximum, 
      Average 
     } 

     public enum SortOrder 
     { 
      Unsorted, 
      Ascending, 
      Descending 
     } 

     public AttributesModel(string field) 
     { 
      Field = field; 
     } 
    } 

出於某種原因或其他,則[Display(Name = "Sort Order")]屬性都被忽略了,而我的DataGrid的頭正在上屬性名稱。

<DataGrid Name="dgAttributes" 
        ItemsSource="{Binding itemsSource}" 
        AutoGenerateColumns="True" 
        CanUserAddRows="False" 
        CanUserDeleteRows="False" 
        CanUserReorderColumns="False" 
        CanUserResizeColumns="False" 
        CanUserResizeRows="False" 
        CanUserSortColumns="False" 
        ColumnWidth="Auto" 
        > 
</DataGrid> 

回答

1

如果您將DataGrid綁定到DataTable,它也會忽略列的Caption屬性。至於我,這是網格列自動生成中的一個錯誤,但您可以通過處理AutoGeneratingColumn事件來解決它。

void DataGrid_AutoGeneratingColumn_1(object sender, DataGridAutoGeneratingColumnEventArgs e) { 
    PropertyDescriptor pd = (PropertyDescriptor)e.PropertyDescriptor; 
    var da = (DisplayAttribute)pd.Attributes[typeof(DisplayAttribute)]; 
    if (da != null) 
    e.Column.Header = da.Name; 
} 
+0

我會在這個事件的身體放什麼? –

+0

請看看更新的答案 –

+0

謝謝,這是訣竅! :) –