2016-06-09 8 views
0

Ich habe dataGrid.ItemsSource gebunden an eine Liste von EntityItem, Client, die ein anderes EntityItem, Company enthält.Change DataGrid Spalte Anzeigewert in AutoGeneratingColumn

Wenn mein dataGrid angezeigt wird, in meiner Company Säule, habe ich die Art meines Objekt (System.Data.Entity. ...) Ich möchte stattdessen meine Company.Name angezeigt werden soll.

In Windows ich konnte es einfach tun:

e.Value = ((Company)(dgv["Company", e.RowIndex].Value)).Name; 

Aber ich kann nicht einen Weg finden, in richtig in WPF zu tun.

Denn jetzt habe ich:

private void dataGridUsers_AutoGeneratingColumn_1(object sender, DataGridAutoGeneratingColumnEventArgs e) 
    { 

     DataGrid dgv = (DataGrid)sender; 
     if (e.PropertyName == "Company") 
     { 
      if (e.PropertyType == typeof(Company)) 
      { 
       ... 
      } 
     } 
    } 

So kann ich sicherstellen, dass ich auf der rechten Spalte bin, aber jetzt bin ich fest, ich weiß nicht, wie die Art, wie ich die Spalte ändern möchten um die Daten anzuzeigen ... Ich habe versucht, in e.PropertyDescriptor zu suchen, aber es ist nur, um die Eigenschaften zu erhalten.

Antwort

1

DataGridAutoGeneratingColumnEventArgs Objekt hat Column Eigenschaft, die eine generierte DataGridColumn Instanz enthält. Betontyp ist DataGridTextColumn, die Binding Eigenschaft hat.

Sie können verbindlich Pfad ändern mit Column.Name Eigenschaft arbeiten

private void DataGridOnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
{ 
    if (e.PropertyName == "Company") 
    { 
     var c = (DataGridTextColumn)e.Column; 
     var b = (Binding)c.Binding; 
     b.Path = new PropertyPath("Company.Name"); 
    } 
}