DataTemplate中的绑定问题

时间:2010-11-26 17:57:19

标签: silverlight

我在DataTemplate中遇到数据绑定问题。在GridTemplate中,Grid中的文本框工作并打印出正确的值。但是HyperlinkBut​​tons DataTemplate中的TextBlock不起作用。虽然HyperlinkBut​​tons NavigateUri绑定正确。任何人都可以帮助我这个

我创建了一个简单的例子来说明我的问题。

MainPage.xaml中

<UserControl x:Class="SilverlightApplication8.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <UserControl.Resources>
        <ControlTemplate x:Key="EventControlTemplate" TargetType="Button">
            <Grid>
                <!--WORKS-->
                <!--<Grid >
                    <TextBlock x:Name="TitleTextBlock" Text="{Binding Title}" Foreground="Red" FontWeight="Bold" />
                </Grid>-->

                <!--DOES NOT WORK-->
                <HyperlinkButton TargetName="_blank" NavigateUri="{Binding Url}"                                  >
                    <HyperlinkButton.ContentTemplate>
                        <DataTemplate>
                            <Grid>
                                <TextBlock Foreground="Green" Text="{Binding Title}"/>
                            </Grid>
                        </DataTemplate>
                    </HyperlinkButton.ContentTemplate>
                </HyperlinkButton>
            </Grid>
        </ControlTemplate>
    </UserControl.Resources>

    <Grid x:Name="LayoutRoot" Background="White">

        <ItemsControl x:Name="Links" Foreground="White" >
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Border >
                        <Button Template="{StaticResource EventControlTemplate}" Click="Button_Click"/>
                    </Border>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>

    </Grid>
</UserControl>

MainPage.xaml.cs中

using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;

namespace SilverlightApplication8
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();

            List<Events> events = new List<Events>();
            events.Add(new Events(){Title = "This is title 1", Url = "http://www.thesun.co.uk"});
            events.Add(new Events(){Title = "This is title 2", Url = "http://www.thesun.co.uk"});
            events.Add(new Events() { Title = "This is title 3", Url = "http://www.thesun.co.uk" });

            Links.ItemsSource = events;
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {

        }
    }

    public class Events
    {
        public string Url { get; set; }
        public string Title { get; set; }
    }
}

1 个答案:

答案 0 :(得分:1)

您正在设置ContentTemplate,其中DataContext将是Content的{​​{1}}。由于您尚未设置HyperlinkButton,因此您尝试绑定Content

这应该有效:

null

但接下来的问题就是为什么你甚至设置<HyperlinkButton TargetName="_blank" NavigateUri="{Binding Url}" Content="{Binding Title}"> <HyperlinkButton.ContentTemplate> <DataTemplate> <Grid> <TextBlock Foreground="Green" Text="{Binding .}"/> </Grid> </DataTemplate> </HyperlinkButton.ContentTemplate> </HyperlinkButton> 而不仅仅是这样做:

ContentTemplate