我正在尝试在RadGridView中创建一系列绑定列,我正在使用模板在两个列中创建超链接.这基本上就是我所拥有的:
- <telerik:GridViewDataColumn IsReadOnly="True" UniqueName="Distributor" DataContext="{Binding Distributor}" CellTemplate="{StaticResource linkTemplate}"/>
和,
- <DataTemplate x:Key="linkTemplate">
- <TextBlock>
- <Hyperlink DataContext={TemplateBinding DataContext} Click="Hyperlink_Click">
- <TextBlock Text="{Binding Name}" />
- </Hyperlink>
- </TextBlock>
- </DataTemplate>
RadGridView本身绑定到一组DistributorContainer对象,这些对象具有Distributor属性等. linkTemplate直接引用Distributor对象中的属性,因此需要将超链接的datacontext设置为Distributor.
不幸的是,Hyperlink的数据上下文是DistributorContainer对象.我在绑定到分销商列表的列表上使用linkTemplate(以及Hyperlink_Click处理程序),我真的想重新使用这个模板,因为它基本上是一样的.
为什么模板不通过TemplateBinding到GridViewDataColumn将Distributor作为其DataContext?
解决方法
以下是如何实现此目的的示例:
XAML
- <Grid>
- <Grid.Resources>
- <DataTemplate x:Key="linkTemplate">
- <TextBlock>
- <Hyperlink>
- <TextBlock
- Text="{Binding
- Value.Name,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type telerik:GridViewCell}}}" />
- </Hyperlink>
- </TextBlock>
- </DataTemplate>
- </Grid.Resources>
- <telerik:RadGridView ItemsSource="{Binding}" AutoGenerateColumns="False">
- <telerik:RadGridView.Columns>
- <telerik:GridViewDataColumn
- DataMemberBinding="{Binding Distributor1}"
- CellTemplate="{StaticResource linkTemplate}" />
- <telerik:GridViewDataColumn
- DataMemberBinding="{Binding Distributor2}"
- CellTemplate="{StaticResource linkTemplate}" />
- </telerik:RadGridView.Columns>
- </telerik:RadGridView>
- </Grid>
C#
- namespace WpfApplication1
- {
- public partial class Window1 : Window
- {
- public Window1()
- {
- InitializeComponent();
- DataContext =
- from i in Enumerable.Range(0,10)
- select new DistributorContainer()
- {
- ID = i,Distributor1 = new Distributor() {
- Name = String.Format("Distributor1 Name{0}",i) },Distributor2 = new Distributor() {
- Name = String.Format("Distributor2 Name{0}",i) }
- };
- }
- }
- public class DistributorContainer
- {
- public int ID { get; set; }
- public Distributor Distributor1 { get; set; }
- public Distributor Distributor2 { get; set; }
- }
- public class Distributor
- {
- public string Name { get; set; }
- }
- }