質問

WPFToolkitのDatagridコントロールを使用しています。データグリッドにデータを入力できますが、DataGridHyperlinkColumnに問題があります。リンクを人の名前として視覚的に表示したいのですが、リンクはUriLinkの値に移動します。

これを行うにはどうすればよいですか?何が間違っていますか?

Xaml:

<dg:DataGridHyperlinkColumn Header="Person Name" Width="200" 
Binding="{Binding Path=PersonName}" IsReadOnly="True" 
TargetName="{Binding Path=UriLink}"></dg:DataGridHyperlinkColumn>

代わりに、代わりにイベントハンドラーを配置し、ナビゲートするページオブジェクトを作成しますが、イベントの2つのパラメーター(この場合はoとe)からデータを引き出すことができないようです。 obj1 / obj2は、クリックされたハイパーリンクの行のオブジェクト/変数です。

代替Xaml:

<dg:DataGridHyperlinkColumn Header="Person Name" Width="200" 
Binding="{Binding Path=PersonName}" IsReadOnly="True" 
TargetName="{Binding Path=UriLink}">
    <dg:DataGridHyperlinkColumn.ElementStyle>
    <Style TargetType="TextBlock">
    <EventSetter Event="Hyperlink.Click" Handler="OnHyperlinkClick" />
    </Style>
    </dg:DataGridHyperlinkColumn.ElementStyle>
    </dg:DataGridHyperlinkColumn>

VBコード(代替Xaml用):

Private Sub OnHyperlinkClick(ByVal o As Object, ByVal e As RoutedEventArgs)

        'TODO: Create page to navigate to
        Dim page As New RedirectPage(obj1, obj2)
        Me.NavigationService.Navigate(page)

End Sub
役に立ちましたか?

解決

TextBlockとしてのキャストo、DataContextは行のオブジェクトです。オブジェクトタイプとしてキャストできます。

他のヒント

Hyperlink.RequestNavigate イベントはもっとうまくいくでしょうか? EventArgsにはナビゲーションターゲットのURIが含まれているように見えます。これはハイパーリンクコントロール自体のURIである必要があります。

AKCODerが言ったように、それはDataContextにあります。 OnHyperlinkClickイベントハンドラーを使用して、次を使用しました。

DirectCast(DirectCast(DirectCast(e.Source, System.Object), System.Windows.Documents.Hyperlink).DataContext, System.Object)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top