Bunun gibi bir kod satırı kullanarak dinamik olarak bir sütun eklemeyi mümkün kılmayı başardım:
MyItemsCollection.AddPropertyDescriptor(
new DynamicPropertyDescriptor<User, int>("Age", x => x.Age));
Soruyla ilgili olarak, bu XAML tabanlı bir çözüm değildir (belirtildiği gibi bunu yapmanın makul bir yolu olmadığından), ne de doğrudan DataGrid.Columns ile çalışacak bir çözümdür. Aslında, ITypedList'i uygulayan ve bu nedenle PropertyDescriptor alımı için özel yöntemler sağlayan DataGrid bağlı ItemsSource ile çalışır. Kodda tek bir yerde ızgaranız için "veri satırları" ve "veri sütunları" tanımlayabilirsiniz.
Eğer sahip olsaydın:
IList<string> ColumnNames { get; set; }
//dict.key is column name, dict.value is value
Dictionary<string, string> Rows { get; set; }
örneğin kullanabilirsiniz:
var descriptors= new List<PropertyDescriptor>();
//retrieve column name from preprepared list or retrieve from one of the items in dictionary
foreach(var columnName in ColumnNames)
descriptors.Add(new DynamicPropertyDescriptor<Dictionary, string>(ColumnName, x => x[columnName]))
MyItemsCollection = new DynamicDataGridSource(Rows, descriptors)
ve MyItemsCollection'a bağlama kullanan ızgaranız karşılık gelen sütunlarla doldurulur. Bu sütunlar, çalışma zamanında dinamik olarak değiştirilebilir (yeni eklenen veya mevcut kaldırılan) ve ızgara, sütun koleksiyonunu otomatik olarak yeniler.
Yukarıda bahsedilen DynamicPropertyDescriptor, normal PropertyDescriptor'a yapılan bir yükseltmedir ve bazı ek seçeneklerle birlikte güçlü bir şekilde yazılmış sütun tanımı sağlar. DynamicDataGridSource, aksi takdirde temel PropertyDescriptor ile gayet iyi çalışır.