DataGrid в пользовательском элементе управления создает исключение. Невозможно привести объект типа 'MS.Internal.NamedObject'. - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть проект, содержащий DataGrid, для которого я реализовал удобный интерфейс сортировки и фильтрации.На самом деле это так удобно, что я извлек соответствующий код в UserControl, который я встроил в тестовый проект.Я добавил DependencyProperties для элементов управления DataGrid, которые я хочу сделать доступными для потребителя UserControl.Пока все хорошо.

Проблема началась, когда я установил свойство DataGrid IsReadOnly = "False".В этот момент любая операция на его ItemsSource вызывает исключение.

DataGrid в исходном проекте полностью удовлетворен IsReadOnly = "False", а UserControl работает нормально с IsReadOnly = "True".В отладчике (VS 2017) все правильно введено и все данные соответствуют ожиданиям.

Одна ошибка происходит с кодом ниже

this.Xrefs.Cast<ProductXref>().ToList()

, где

public ICollectionView Xrefs { get; set; }

устанавливается из моего ItemsSource DependencyProperty.

В других местах я получаю исключение Object does not match target type.Является ли VS обертыванием коллекции ItemsSource - это еще один объект, но только когда DataGrid находится в UserControl и настроен не только для чтения?

Я ценю, что могу оставить DataGrid только для чтения и использовать дочернюю форму для редактирования строки,но я предпочитаю редактирование на месте, если это возможно.

1 Ответ

0 голосов
/ 21 сентября 2018

Вместо приведения всех элементов в представлении коллекции вы можете использовать метод OfType<T>, чтобы получить только объекты ProductXref:

this.Xrefs.OfType<ProductXref>().ToList();

В представлении коллекции могут быть объекты другого типа.как, например, заполнитель для последней «пустой» строки, которую вы обычно видите в DataGrid.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...