【问题标题】:WPF DataGrid with multiple hyperlinks in a cellWPF DataGrid 在一个单元格中具有多个超链接
【发布时间】:2015-04-05 02:03:07
【问题描述】:

我有一个这样的 WPF DataGrid

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

现在我希望每篇文章都像超链接一样可点击。如果单击了一个,我将添加一个路径到正在显示的名称并打开文件,如

c:\articles\A5.pdf

我有

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

但是DataGridHyperlinkColumn 使单元格的完整内容成为一个可点击的链接。如果一个单元格中有多篇文章,我想区分它们。

我该怎么做?

【问题讨论】:

    标签: c# wpf mvvm hyperlink datagrid


    【解决方案1】:

    假设Articles 是或可以是某种链接列表,您可以使用DataGridTemplateColumnItemsControlItemsSource 绑定到Articles 并每个项目是单独的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>
    

    【讨论】:

    • 问题是Binding不起作用。 &lt;ItemsControl ItemsSource="{Binding Articles}"&gt; 不知道 Articles。它适用于 DataGrid 本身,但不适用于模板
    • Articles的类型是什么?它是某种列表吗?您是否尝试将 TextBlock 文本设置为某些固定文本而不是绑定?也许ItemsSource 绑定可以正常工作(应该如此),但内部绑定不起作用,您会看到空元素列表。这应该有效。 DataGridTemplateColumn 中的所有绑定都在项目的上下文中工作
    • DataGrid 本身具有到List&lt;Products&gt; 的绑定。而ArticlesList&lt;Article&gt;。但是 VS-Designer 在编译时和运行时都不能识别Articles。我没有特别设置任何东西。看起来模板不知道 DataGrid 的绑定。
    • Articles 是公共财产吗?既然你使用List&lt;T&gt;(不是ObservableCollection),你什么时候初始化它?什么时候添加项目?这一切都在Products 的构造函数中吗?这对我有用很多次。在项目的构造函数中创建的固定子列表上添加答案之前,我已经对其进行了测试,但主体保持不变
    • @juergend 如果你想看看我的工作示例,那么它是here
    猜你喜欢
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    相关资源
    最近更新 更多