我有一个简单的用户控件
的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;
看起来很好......
任何帮助表示赞赏
由于 格雷姆
答案 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)
希望这有助于:)