juergen d
juergen d

Reputation: 204766

WPF DataGrid with multiple hyperlinks in a cell

I have a WPF DataGrid like this

name | articles
-----+-----------------------
N1   | A1.pdf
N2   | A2.pdf, A5.pdf, A6.pdf
N3   |        

Now I want every article be clickable like a hyperlink. If one is being clicked I will add a path to the name being displayed and open the file like

c:\articles\A5.pdf

I have

<DataGrid>
    <DataGrid.Columns>
         <DataGridTextColumn Header="Name" Binding="{Binding Path=Name}"/>
         <DataGridHyperlinkColumn Header="Articles" Binding="{Binding Path=Articles}" />
    </DataGrid.Columns>
</DataGrid>

but DataGridHyperlinkColumn makes the complete content of the cell as one link clickable. I want to differ between them if multiple articles are in a cell.

How can I do it?

Upvotes: 1

Views: 2833

Answers (1)

dkozl
dkozl

Reputation: 33364

Assuming that Articles is, or can be, some sort of list of links you can use DataGridTemplateColumn where you put ItemsControl with ItemsSource bound to Articles and each item is separate HyperLink

<DataGrid ...>
    <DataGrid.Columns>
        <!-- other columns -->
        <DataGridTemplateColumn Header="Articles">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ItemsControl ItemsSource="{Binding Articles}">
                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <StackPanel Orientation="Horizontal"/>
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <TextBlock>
                                    <Hyperlink NavigateUri="{Binding NavigateUri}">
                                        <TextBlock Text="{Binding DisplayText}"/>
                                    </Hyperlink>
                                </TextBlock>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

Upvotes: 2

Related Questions