Использование DataGridHyperlinkColumn WPToolKit

Я использую элемент управления Datagrid WPFToolkit. Я могу заполнить сетку данных, но у меня проблемы с DataGridHyperlinkColumn. Я хотел бы, чтобы он визуально отображал ссылку как имя человека, но чтобы ссылка шла к любому значению UriLink.

Как я могу это сделать? Что я делаю неправильно?

Xaml:

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

В качестве альтернативы я бы предпочел вместо этого добавить обработчик событий и создать объект страницы для перехода к нему, но я не могу извлечь какие-либо данные из двух параметров события (в данном случае 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

person spong    schedule 16.03.2009    source источник
comment
stackoverflow.com/questions/1755455/   -  person DmitryBoyko    schedule 26.01.2012


Ответы (3)


В качестве TextBlock его DataContext является объектом вашей строки. Вы можете использовать его как тип вашего объекта.

person Community    schedule 25.03.2009

Возможно, событие Hyperlink.RequestNavigate будет работать лучше? Похоже, что EventArgs содержит URI цели навигации, который должен быть URI самого элемента управления гиперссылкой.

person Andy    schedule 21.03.2009

Как сказал AKCODer, это в DataContext. Используя обработчик события OnHyperlinkClick, я использовал следующее:

DirectCast(DirectCast(DirectCast(e.Source, System.Object), System.Windows.Documents.Hyperlink).DataContext, System.Object)
person spong    schedule 06.04.2009