Silverlight UserControl绑定

时间:2009-11-26 03:12:19

标签: c# wpf silverlight binding user-controls

我有一个简单的用户控件

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

我的问题是,当我创建一个控件实例时,标题永远不会显示 - 现在我已经使用e.NewValue测试了OnCaptionChanged函数中的属性,它是正确的值。我的绑定有什么问题?

如果我在set

的caption属性后面的代码中写入
textBlockCaption.Text = value;

看起来很好......

任何帮助表示赞赏

由于 格雷姆

2 个答案:

答案 0 :(得分:2)

从代码隐藏中看起来你错过了一行代码。

尝试在构造函数中添加DataContext = this;。这对我来说过去很有用。

答案 1 :(得分:0)

您是如何创建NavigationItem控件的实例的?

你需要做类似的事情:

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

<gg:NavigationItem Caption="FooBar" />

甚至

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

其中TheCaption是您的Page的DataContext的属性(例如您的ViewModel)

希望这有助于:)