c# – WPF模板和GridView中的DataContext绑定

前端之家收集整理的这篇文章主要介绍了c# – WPF模板和GridView中的DataContext绑定前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试在RadGridView中创建一系列绑定列,我正在使用模板在两个列中创建超链接.这基本上就是我所拥有的:
  1. <telerik:GridViewDataColumn IsReadOnly="True" UniqueName="Distributor" DataContext="{Binding Distributor}" CellTemplate="{StaticResource linkTemplate}"/>

和,

  1. <DataTemplate x:Key="linkTemplate">
  2. <TextBlock>
  3. <Hyperlink DataContext={TemplateBinding DataContext} Click="Hyperlink_Click">
  4. <TextBlock Text="{Binding Name}" />
  5. </Hyperlink>
  6. </TextBlock>
  7. </DataTemplate>

RadGridView本身绑定到一组DistributorContainer对象,这些对象具有Distributor属性等. linkTemplate直接引用Distributor对象中的属性,因此需要将超链接的datacontext设置为Distributor.

不幸的是,Hyperlink的数据上下文是DistributorContainer对象.我在绑定到分销商列表的列表上使用linkTemplate(以及Hyperlink_Click处理程序),我真的想重新使用这个模板,因为它基本上是一样的.

为什么模板不通过TemplateBinding到GridViewDataColumn将Distributor作为其DataContext?

解决方法

以下是如何实现此目的的示例:

XAML

  1. <Grid>
  2. <Grid.Resources>
  3. <DataTemplate x:Key="linkTemplate">
  4. <TextBlock>
  5. <Hyperlink>
  6. <TextBlock
  7. Text="{Binding
  8. Value.Name,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type telerik:GridViewCell}}}" />
  9. </Hyperlink>
  10. </TextBlock>
  11. </DataTemplate>
  12. </Grid.Resources>
  13. <telerik:RadGridView ItemsSource="{Binding}" AutoGenerateColumns="False">
  14. <telerik:RadGridView.Columns>
  15. <telerik:GridViewDataColumn
  16. DataMemberBinding="{Binding Distributor1}"
  17. CellTemplate="{StaticResource linkTemplate}" />
  18. <telerik:GridViewDataColumn
  19. DataMemberBinding="{Binding Distributor2}"
  20. CellTemplate="{StaticResource linkTemplate}" />
  21. </telerik:RadGridView.Columns>
  22. </telerik:RadGridView>
  23. </Grid>

C#

  1. namespace WpfApplication1
  2. {
  3. public partial class Window1 : Window
  4. {
  5. public Window1()
  6. {
  7. InitializeComponent();
  8.  
  9. DataContext =
  10. from i in Enumerable.Range(0,10)
  11. select new DistributorContainer()
  12. {
  13. ID = i,Distributor1 = new Distributor() {
  14. Name = String.Format("Distributor1 Name{0}",i) },Distributor2 = new Distributor() {
  15. Name = String.Format("Distributor2 Name{0}",i) }
  16. };
  17. }
  18. }
  19.  
  20. public class DistributorContainer
  21. {
  22. public int ID { get; set; }
  23. public Distributor Distributor1 { get; set; }
  24. public Distributor Distributor2 { get; set; }
  25. }
  26.  
  27. public class Distributor
  28. {
  29. public string Name { get; set; }
  30. }
  31. }

猜你在找的C#相关文章