2009-02-09 10 views
6

Weiß jemand, ob es möglich ist, auf eine DataGrid-Spalte zuzugreifen, indem der x: Name (wie in der xaml definiert) von innerhalb des Codes dahinter verwendet wird?Ist es möglich, auf eine Silverlight DataGrid-Spalte nach Name und nicht nach Spaltenindex zuzugreifen?

Ich weiß, dass ich den folgenden Code verwenden:

myDataGridList.Columns[0].Header = "Some Data"; 

..aber ich so etwas wie dies, wenn möglich zu verwenden, würde es vorziehen:

myDataGridList.Columns["ColumnName"].Header = "Some Data"; 

Vielen Dank im Voraus.

Antwort

13

Sie können ObservableCollection mit Linq oder einer foreach-Schleife erweitern, um eine lineare Suche nach den Spalten durchzuführen.

public static class MyExtensions 
{ 
    public static DataGridColumn GetByName(this ObservableCollection<DataGridColumn> col, string name) 
    { 
     return col.SingleOrDefault(p => 
      (string)p.GetValue(FrameworkElement.NameProperty) == name 
     ); 
    } 
} 

Dann können Sie diese anstelle der Eigenschaft Columns nennen:

myGrid.Columns.GetByName("theName"); 
+0

Vielen Dank - perfekt funktioniert. – cyberbobcat

+0

Schöne Antwort. Ich finde LINQ an so vielen Orten hilfreich ... –