Как получить доступ к элементам управления в WPF DataGrid - PullRequest
0 голосов
/ 28 июля 2010

В старые добрые (хорошо !!) дни WinForms строка данных раньше была фактическим элементом управления, и вы могли получить доступ к DataItem.

В WPF все перевернуто, а dataGrid.Items - это просто исходные данные.

Возможно, я делаю это неправильно, так как я немного новичок в WPF, но как я могу перебирать строки моего вида сетки, выбирая значения из определенных меток, текстовых полей и т. Д.?

Ответы [ 2 ]

0 голосов
/ 13 августа 2010

Вы можете использовать это

    public DataGridRow TryFindRow(object item, DataGrid grid)
    {
        // Does not de-virtualize cells
        DataGridRow row = (DataGridRow)(grid as ItemsControl).ItemContainerGenerator.ContainerFromItem(item);

        return row;
    }

где элемент представляет данные, отображаемые в строке. Надеюсь, это поможет.

0 голосов
/ 28 июля 2010

Да, вы делаете это неправильно.То, что вы должны делать, - это перебирать элементы в вашем источнике данных - это, в конце концов, все значения.

Можно перебирать объекты WPF, но это не тривиально.И есть серьезная проблема, с которой вы столкнетесь, если попытаетесь.

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

Если вы используете преобразователи значений и форматированиев ваших привязках (это единственная причина, по которой я могу подумать, что вы захотите посмотреть на объекты WPF, а не на базовые элементы данных), я боюсь, что ответ таков: не делайте этого.Выполните преобразование и форматирование значений в своем источнике данных и представьте результаты в виде свойств, к которым можно непосредственно привязать.

Конечно, можно использовать WPF без использования шаблона MVVM.Но это кирпичная стена, с которой вы можете столкнуться, если не сделаете этого.

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