2009-11-26 5 views
0

J'ai un contrôle simple utilisateurSilverlight UserControl Reliure

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

Ce que ma question est, quand je crée une instance de contrôle la légende ne montre - maintenant j'ai testé la propriété dans la fonction OnCaptionChanged en utilisant e.NewValue et c'est la valeur correcte. Quel est le problème avec ma liaison?

Si je vous écris dans le code derrière la propriété de légende pour voir

textBlockCaption.Text = value; 

Il semble bien ...

Toute aide appréciée

Merci Graeme

Répondre

2

Du code-behind, il semble qu'il vous manque un l ine de code.

Essayez d'ajouter DataContext = this; dans votre constructeur. Cela avait fonctionné pour moi, par le passé.

+0

Salut C'était exactement ça !!! Merci! –

+0

Si vous modifiez DataContext, vous ne pourrez pas utiliser la liaison de données d'un niveau supérieur (au format où UserControl est utilisé) – Grigory

0

Comment créez-vous l'instance du contrôle NavigationItem?

vous aurez besoin de faire quelque chose comme:

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

<gg:NavigationItem Caption="FooBar" /> 

ou même

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

où ligne indiquant est une propriété de votre de DataContext (par exemple votre ViewModel)

Hope this helps :)

+0

Oui Je crée le contrôle de cette façon! –

Questions connexes