Попытка связать TextBlock, который находится внутри DataTemplate элемента управления аккордеона в Silverlight. Текст не виден при запуске приложения - PullRequest
0 голосов
/ 03 января 2012

Я немного новичок в Silverlight. Я хочу показать заголовок в элементе управления аккордеоном, который связан со свойством этого пользовательского элемента управления.У меня есть TextBlock, который находится внутри DataTemplate элемента управления Accordion в Silverlight.Когда я запускаю приложение, текст становится пустым, и в заголовке аккордеона ничего не отображается.

    <UserControl x:Class="SilverlightApplication1.SilverlightControl1"
    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"
    xmlns:layoutToolkit="clr-     namespace:System.Windows.Controls;assembly=System.Windows.Controls.Layout.Toolkit"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400" DataContext="{Binding RelativeSource={RelativeSource Self}}">

    <Grid x:Name="LayoutRoot" Background="White">
        <layoutToolkit:Accordion x:Name="accordionFilter" HorizontalAlignment="Stretch" SelectionMode="ZeroOrMore">
            <layoutToolkit:AccordionItem MinHeight="0" MaxHeight="120" IsSelected="True">
                <layoutToolkit:AccordionItem.HeaderTemplate>
                    <DataTemplate>
                        <Grid Height="22" VerticalAlignment="Center">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="100*"></ColumnDefinition>
                            </Grid.ColumnDefinitions>
                            <TextBlock
                                    Text="{Binding MainPageSelectedText}" 
                                    Width="150"></TextBlock>
                        </Grid>
                    </DataTemplate>
                </layoutToolkit:AccordionItem.HeaderTemplate>
            </layoutToolkit:AccordionItem>
        </layoutToolkit:Accordion>
    </Grid>
</UserControl>



using System;
using System.ComponentModel;
using System.Windows.Controls;

namespace SilverlightApplication1
{
    public partial class SilverlightControl1 : UserControl, INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string name)
        {
            PropertyChangedEventHandler ph = this.PropertyChanged;

            if (ph != null)
                ph(this, new PropertyChangedEventArgs(name));
        }

        public SilverlightControl1()
        {
            InitializeComponent();
            MainPageSelectedText = "Sample Text";
        }

        public string MainPageSelectedText
        {
            get { return _MainPageSelectedText; }
            set
            {
                string myValue = value ?? String.Empty;
                if (_MainPageSelectedText != myValue)
                {
                    _MainPageSelectedText = value;
                    OnPropertyChanged("MainPageSelectedText");
                }
            }
        }
        private string _MainPageSelectedText;
    }
}

1 Ответ

0 голосов
/ 03 января 2012

На уровне шаблона данных у вас нет прямого доступа к DataContext пользовательского элемента управления, поэтому ваша привязка должна выглядеть следующим образом:

Text="{Binding MainPageSelectedText, ElementName=MyUserControl}"

при условии, что вы установите Name /x: имя вашего пользовательского элемента управления MyUserControl .

...