C# 单元格中具有多个超链接的WPF数据网格
我有一个像这样的WPF数据网格C# 单元格中具有多个超链接的WPF数据网格,c#,wpf,mvvm,hyperlink,datagrid,C#,Wpf,Mvvm,Hyperlink,Datagrid,我有一个像这样的WPF数据网格 name | articles -----+----------------------- N1 | A1.pdf N2 | A2.pdf, A5.pdf, A6.pdf N3 | 现在我希望每一篇文章都能像超链接一样点击。如果单击其中一个,我将为显示的名称添加一个路径,并打开文件,如下所示 c:\articles\A5.pdf 我有 <DataGrid> <DataGrid.Columns>
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
使单元格的完整内容成为一个可点击的链接。如果一个单元格中有多个项目,我希望它们之间有所不同
如何操作?假设
文章
是或可以是某种链接列表,您可以使用DataGridTemplateColumn
将项目控件
与项目资源
绑定到文章
,每个项目都是独立的超链接
<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>
问题在于绑定不起作用<代码>不知道文章
。它在DataGrid
本身中工作,但不在模板中工作文章的类型是什么?它是某种列表吗?您是否尝试将TextBlock
text设置为某个固定文本而不是绑定?也许ItemsSource
绑定可以正常工作(应该如此),但内部绑定不起作用,您会看到空元素列表。这应该行得通。DataGridTemplateColumn
中的所有绑定都在项的上下文中工作DataGrid本身有一个到List
的绑定。而文章
是列表
。但是VS设计器在编译时和运行时都无法识别文章。我没有特别设置任何内容。看起来模板不知道DataGrid的绑定。Articles
是公共属性吗?既然您使用了列表
(而不是可观察到的集合
),您何时初始化它?什么时候添加项目?这一切都在产品的构造函数中吗?这对我来说是个好办法。在为项的构造函数中创建的固定子列表添加答案之前,我已经对其进行了测试,但主体保持不变same@juergend如果你想看看我的工作示例,那么