Проверка WPF внутри UI Virtualized ListBox - PullRequest
0 голосов
/ 17 декабря 2010

Мне нужно сделать какую-то проверку данных в разрабатываемом приложении WPF

Насколько я знаю, когда вы добавляете ValidatesOnDataErrors=True в Binding, каждый раз, когда Binding разрешается (этокаждый раз, когда значение изменяется, это может быть при потере фокуса), механизм привязки проверяет источник привязки, через IDataErrorInfo, получает доступ к интерфейсу, выясняет, есть ли какая-либо ошибка или нет.только с одной оговоркой.Для того чтобы данные были проверены, они должны быть обработаны.Если у вас есть ObservableCollection этой сущности, связанной с ListBox с VirtualizingStackPanel.IsVirtualizing=True, проверяются только визуализированные элементы.Поскольку большинство элементов находятся вне области просмотра, они не отображаются.

Как я могу принудительно проверить каждый элемент?Удаление виртуализации пользовательского интерфейса не вариант.

1 Ответ

0 голосов
/ 17 декабря 2010

Я нашел один способ сделать это.Это ужасно.Но это работает.Предполагая, что виртуализированный список пользовательского интерфейса - myList

for (Int32 i = 0; i < myList.Items.Count; i++)
{
     myList.ScrollIntoView(myList.Items[i]);
}
UpdateLayout();

Таким образом, я получаю список всех элементов.Я прокручиваю список до каждого элемента в этом списке.И я обновляю макет, потому что ScrollIntoView, я думаю, асинхронный.После этого каждый элемент был обработан, каждая привязка была выполнена, и каждая проверка была оценена.

Есть ли лучшие способы?

...