Вопрос

В тестовом проекте мне удалось автогенерировать столбцы 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 Реализация тоже на всякий случай) по типу сбора. Теперь я получаю столбцы правильно сгенерированы для меня в том, есть ли есть строки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top