Silverlight Usercontrol Bindung
-
05-07-2019 - |
Frage
Ich habe eine einfache Benutzerkontrolle
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
}
}
}
Was mein Problem ist, wenn ich eine Instanz der Kontrolle erstellen zeigt die Beschriftung nie - jetzt habe ich die Eigenschaft in der OnCaptionChanged Funktion e.NewValue getestet habe, und es ist der richtige Wert. Was ist falsch mit meiner Bindung?
Wenn ich in dem Code hinter Caption-Eigenschaft für Satz schreiben
textBlockCaption.Text = value;
Es scheint in Ordnung ...
Jede Hilfe willkommen
Danke Graeme
Lösung
Von der Code-behind sieht es aus wie Sie eine Zeile Code fehlen.
Versuchen DataContext = this;
in Ihrem Konstruktor hinzuzufügen. Das hat für mich in der Vergangenheit gearbeitet hat.
Andere Tipps
Wie erstellen Sie die Instanz der NavigationItem Kontrolle?
Sie werden so etwas wie tun müssen:
<Page ...
xmlns:gg="clr-namespace:GraemeGorman_Controls.Navigation">
<gg:NavigationItem Caption="FooBar" />
oder auch
<gg:NavigationItem Caption="{Binding Path=TheCaption}" />
wo TheCaption ist eine Eigenschaft Ihrer Seite Datacontext (zB Ihr Ansichtsmodell)
Hope this helps:)