Связывание пользовательского элемента управления Silverlight - PullRequest
0 голосов
/ 26 ноября 2009

У меня есть простой пользовательский элемент управления

Xaml:

<UserControl x:Class="GraemeGorman_Controls.Navigation.NavigationItem"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Border x:Name="borderLayoutRoot">
        <TextBlock x:Name="textBlockCaption" Text="{Binding Caption}" />
    </Border>
</UserControl>

Cs:

namespace GraemeGorman_Controls.Navigation
{
    public partial class NavigationItem : UserControl
    {
        public static readonly DependencyProperty CaptionProperty = DependencyProperty.Register(
            "Caption",
            typeof (string),
            typeof (NavigationItem),
            new PropertyMetadata(new PropertyChangedCallback(OnCaptionChanged)));

        public string Caption
        {
            get {return (string)GetValue(CaptionProperty);}
            set {SetValue(CaptionProperty, value);}
        }

        public NavigationItem()
        {
            InitializeComponent();
        }

        private static void OnCaptionChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            //null
        }
    }
}

В чем проблема, когда я создаю экземпляр элемента управления, заголовок никогда не отображается - теперь я протестировал свойство в функции OnCaptionChanged, используя e.NewValue, и это правильное значение. Что не так с моим переплетом?

Если я напишу в коде свойство заголовка для набора

textBlockCaption.Text = value;

Кажется, хорошо ...

Любая помощь приветствуется

Спасибо Graeme

Ответы [ 2 ]

2 голосов
/ 26 ноября 2009

Из кода видно, что вам не хватает одной строки кода.

Попробуйте добавить DataContext = this; в свой конструктор. Это работало для меня в прошлом.

0 голосов
/ 26 ноября 2009

Как вы создаете экземпляр элемента управления NavigationItem?

вам нужно будет сделать что-то вроде:

<Page ...
  xmlns:gg="clr-namespace:GraemeGorman_Controls.Navigation">

<gg:NavigationItem Caption="FooBar" />

или даже

<gg:NavigationItem Caption="{Binding Path=TheCaption}" />

, где TheCaption является свойством DataContext вашей страницы (например, вашей ViewModel)

Надеюсь, это поможет:)

...