0

DataGrid行と列があります。各行は、データ コレクション内の項目に対応しています。列の 1 つに、データ項目の名前のテキストを含むハイパーリンクを設定したいのですが、ハイパーリンクをクリックすると、そのハイパーリンクの項目 (それがある行) のコマンドが実行されます。

これまでのところ、それが理にかなっていることを願っています。

私の問題:ハイパーリンクをバインドしCommandParameterて現在の行のデータ項目を使用するにはどうすればよいですか? ランダムなセル (行 3 列 2 など) を選択し、行 1 列 1 のハイパーリンクをクリックすると、現在のアイテムが行 1 ではなく行 3 のアイテムであると表示されるという問題が発生しています!! !

これは私の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 に答える