代码之家  ›  专栏  ›  技术社区  ›  Jake

WPF模板和绑定到GridView中的DataContext

  •  6
  • Jake  · 技术社区  · 15 年前

    我试图在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>
    

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

    1 回复  |  直到 15 年前
        1
  •  10
  •   kevev22    13 年前

    下面是一个如何实现这一点的示例:

    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; }
        }
    }