У меня есть таблица данных WPF с ItemSource
в качестве пользователя, выбранного Outlook.Folder
. Значения столбцов DataGrid связаны со свойствами границы Outlook.Folder.Items
. В нем также есть текстовые поля, используемые для фильтрации соответствующих полей.
Чтобы отфильтровать данные, которые я создал, ICollectionView
, а затем, используя событие TextChanged
объекта TextBox, сравните свойство FullName
со значением TextBox.Text
...
` ICollectionView FilterView = CollectionViewSource.GetDefaultView(KontaktGrid.Items);`
`FilterView.Filter = o =>
{
Outlook.ContactItem contact = o as Outlook.ContactItem;
if (contact.CompanyName.ToUpper().Contains(filterBox.Text.ToUpper()))
return true;
return false;
};`
Это работало нормально на моей небольшой выборке контактов, проблема возникает с большими числами, вот сообщение об ошибке ....
Количество элементов возможность одновременного открытия ограничена администратором сервера.
Поэтому я попытался включить Marshal.ReleaseComObject()
в ложное условие для моего if()
`else{
Marshal.ReleaseComObject(contact/o);
return false;
}`
увы. ..
COM-объект, который был отделен от базового RCW, не может быть использован.
Я понимаю, что это связано с тем, что код все еще использует связанный объект.
Наконец, я попытался получить значение содержимого ячейки для сравнения, что, в свою очередь, я бы предпочел из-за длительного времени чтения для доступа к каждому объекту. Использование
`DataGridRow row = DataGrid.ItemContainerGenerator.ContainerFromItem(contact/o)
KontaktGrid.Columns[column].GetCellContent(row);`
в качестве аргументов как o
, так и его приведенного аналога.
Это работает в другой части моего кода, получая CheckBox, который я использую как часть того же DataGrid, чтобы показать независимо от того, выбран элемент или нет. В проблемном случае до сих пор возвращалось только ноль
Я в тупике.