Да, вы делаете это неправильно.То, что вы должны делать, - это перебирать элементы в вашем источнике данных - это, в конце концов, все значения.
Можно перебирать объекты WPF, но это не тривиально.И есть серьезная проблема, с которой вы столкнетесь, если попытаетесь.
Вы можете использовать класс VisualTreeHelper
для поиска в визуальном дереве и поиска объектов-потомков DataGrid
.Если вы будете играть с этим достаточно долго, в конце концов вы поймете, как найти конкретные элементы управления, которые вы ищете.Но DataGrid
(фактически VirtualizingStackPanel
в его шаблоне управления) виртуализирует своих визуальных потомков.Если элемент еще не появился на экране, его объекты WPF еще не созданы, и вы не найдете их в визуальном дереве.Возможно, вам не удастся найти то, что вы ищете, не потому, что у вас нет способа его найти, а потому, что его нет.
Если вы используете преобразователи значений и форматированиев ваших привязках (это единственная причина, по которой я могу подумать, что вы захотите посмотреть на объекты WPF, а не на базовые элементы данных), я боюсь, что ответ таков: не делайте этого.Выполните преобразование и форматирование значений в своем источнике данных и представьте результаты в виде свойств, к которым можно непосредственно привязать.
Конечно, можно использовать WPF без использования шаблона MVVM.Но это кирпичная стена, с которой вы можете столкнуться, если не сделаете этого.