мне удалось сделать это можно динамически добавлять столбец, используя только строки кода:
MyItemsCollection.AddPropertyDescriptor(
new DynamicPropertyDescriptor<User, int>("Age", x => x.Age));
в отношении к вопросу, это не XAML-решение (так как уже упоминалось есть нет разумного способа сделать это), и это решение, которое будет работать непосредственно с DataGrid.Columns. Он фактически работает с привязкой DataGrid ItemsSource, которая реализует ITypedList и, таким образом, предоставляет настраиваемые методы для поиска PropertyDescriptor. В одном месте кода вы можете определить «строки данных» и «столбцы данных» для вашей сетки.
Если бы:
IList<string> ColumnNames { get; set; }
//dict.key is column name, dict.value is value
Dictionary<string, string> Rows { get; set; }
можно использовать, например:
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)
и ваша сетка с использованием привязки к MyItemsCollection будут заполнены соответствующими столбцами. Эти столбцы могут быть изменены (новые добавлены или уже удалены) во время выполнения динамически, и сетка автоматически обновит коллекцию колонок.
DynamicPropertyDescriptor, упомянутый выше, является просто обновлением до обычного PropertyDescriptor и предоставляет определение строго типизированных столбцов с некоторыми дополнительными параметрами. В противном случае DynamicDataGridSource будет работать только с прекрасным событием с базовым PropertyDescriptor.
Моя причина в том, что идет от ASP.Net Я новичок, что может быть сделано с привязкой порядочные данных и я не уверен, где это пределы. Спасибо, у меня будет игра с AutoGenerateColumns. – 2008-11-26 20:37:00