Проблемы с привязкой в ​​DataTemplate - PullRequest
0 голосов
/ 26 ноября 2010

У меня возникли проблемы с привязкой данных внутри шаблона данных.В ControlTemplate ниже текстовое поле в Grid работает и печатает правильное значение.Но TextBlock внутри DataTemplate HyperlinkButtons не работает.Хотя HyperlinkButtons NavigateUri связан правильно.Может ли кто-нибудь PLZ помочь мне с этим

Я создал простой пример, иллюстрирующий мою проблему.

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 Ответ

1 голос
/ 26 ноября 2010

Вы устанавливаете ContentTemplate, DataContext которого будет Content из 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 вместо того, чтобы просто делать это:

<HyperlinkButton TargetName="_blank" NavigateUri="{Binding Url}" Content="{Binding Title}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...