0

我有一个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>

如果我单击超链接所在的单元格,然后单击超链接,一切都会正常工作。但这不是一个非常好的工作流程......如果用户单击超链接,它应该有正确的项目......

4

1 回答 1

0

我已经解决了我自己的问题,谢谢大家的帮助(笑)

无论如何,只是因为这可能对以后的某人有所帮助,我没有使用 CurrentItem ,因为当我单击超链接时它似乎没有正确更新。相反,我将命令所需的数据作为命令参数提供。

因此,该命令实际上只使用了我的数据项的名称,所以我没有传递整个数据项(当前项),而是传递了名称,现在它可以正常工作了。

<Hyperlink Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}, Path=DataContext.NavigateToFormCommand}"
                   CommandParameter="{Binding dataName}">
于 2013-06-26T17:30:28.313 回答