У гиперссылки в столбце данных есть проблемы с обновлением CurrentItem объекта DataGrid.

У меня есть DataGrid со строками и столбцами. Каждая строка соответствует элементу в моей коллекции данных. Для одного из моих столбцов я хочу иметь гиперссылку с текстом имени моего элемента данных, и когда я нажимаю на гиперссылку, он выполняет команду для элемента гиперссылки ТО (строка, в которой он находится)

Надеюсь, что это имеет смысл до сих пор.

Моя проблема: как связать гиперссылку CommandParameter использовать элемент данных текущей строки? Я сталкиваюсь с проблемой, когда, если у меня выбрана какая-то случайная ячейка (скажем, строка 3, столбец 2), и я нажимаю гиперссылку в строке 1, столбец 1, она скажет, что текущий элемент - это элемент в строке 3, а не в строке 1!!!

Это мой код xaml:

<DataGridTemplateColumn Width="80">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock>
                <Hyperlink Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}, Path=DataContext.NavigateToFormCommand}"
                   CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}, Path=CurrentItem}">
                    <TextBlock Text="{Binding dataName}" />
                </Hyperlink>
            </TextBlock>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

Если я щелкну ячейку, в которой находится гиперссылка, и ТОГДА нажму на гиперссылку, все будет работать нормально. Но это не очень хороший рабочий процесс... если пользователь нажимает гиперссылку, он должен иметь правильный элемент...

1 ответ

Я решил свою проблему, спасибо за помощь, ребята (смеется).

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

Таким образом, команда фактически использовала только имя моего элемента данных, поэтому вместо передачи всего элемента данных (текущего элемента) я передал имя, и теперь оно работает нормально.

<Hyperlink Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}, Path=DataContext.NavigateToFormCommand}"
                   CommandParameter="{Binding dataName}">
Другие вопросы по тегам