WPF DataGrid Autocolumn Генерация через ICUSTOMTYPEDESSCRICTOR
-
02-10-2019 - |
Вопрос
В тестовом проекте мне удалось автогенерировать столбцы WPF DataGrid в следующем сценарии, где данные хранятся в словаре и привязке, выполняется через PropertyDescriptors:
public class People:List<Person>{
...
}
public class Person:Dictionary<string,string>,INotifyPropertyChanged,ICustomTypeDescriptor
{
}
Проблема у меня есть в моем реальном жизни проекта, я использую MVVM, так что это ЛюдиViewModel, который наследует ViewModelbase и, следовательно, не может наследить списокu003CPerson> Отказ Я попробовал реализовать Ilistu003CPerson> вместо этого со внутренним спискомu003CPerson> и явно установленным DataContext на Ilistu003CPerson> ссылка, но это не сработало.
Я видел аналогичный пост о привязке выигрышных форм datagridview здесь, Итак, мне интересно, если та же самая логика применяется в WPF и в первую очередь, что именно заставляет выполнять реализацию ICUSTOMTYPEDEPESSCRICTOR при наведении спискаu003CT> Что не хватает, когда вы просто реализуете Ilistu003CT> вместо.
Решение
То DataGrid
использует то CollectionView
Для вашей коллекции для генерации свойств. Более конкретно, он бросил CollectionView
к IItemProperties
, какой по умолчанию CollectionView
не реализует. Если вы не реализуете IList
(Не общий), то по умолчанию CollectionView
будет использовано.
Итак, внедряя нечебные IList
Интерфейс должен решить это (List<T>
реализует оба, поэтому это работает, если вы получаете от List<Person>
).
Другие советы
Так как он уже не упоминается, у меня была связанная проблема, где столбцы в DataGrid
не были автоматически генерируемыми, когда нет рядов; Оказывается, что DataGrid
не смотрел на мой IItemProperties
реализация вообще (я не знаю почему), но использовал чисто ICustomTypeDescriptor
Реализация на каждом отдельном объекте строки для генерации столбцов, который тоже работает, но приводит к тому, что они не имеют столбцов, когда нет рядов.
Решение было реализации ITypedList
(Я оставил IItemProperties
Реализация тоже на всякий случай) по типу сбора. Теперь я получаю столбцы правильно сгенерированы для меня в том, есть ли есть строки.