2010-02-11 4 views
1

Étant donné le code suivant, pourquoi "Mon texte stupide" ne serait-il jamais lié à la zone de texte UserControls?La liaison de propriété UserControl ne fonctionne pas

MainPage.xaml

<Grid x:Name="LayoutRoot"> 
    <Local:Stupid StupidText="My Stupid Text" /> 
</Grid> 

Stupid.xaml

<UserControl x:Class="SilverlightApplication5.Stupid" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid x:Name="LayoutRoot" Background="White"> 
     <TextBlock Text="{Binding StupidText}" /> 
    </Grid> 
</UserControl> 

Stupid.xaml.cs

public partial class Stupid : UserControl 
{ 
    public string StupidText 
    { 
     get { return (string)GetValue(StupidTextProperty); } 
     set { SetValue(StupidTextProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for StupidText. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty StupidTextProperty = 
     DependencyProperty.Register("StupidText", typeof(string), typeof(Stupid), new PropertyMetadata(string.Empty)); 

    public Stupid() 
    { 
     InitializeComponent(); 
    } 
} 
+0

La réponse ci-dessous est très bien mais je fait la promotion à un contrôle plutôt que UserControl et ma liaison est bien maintenant. –

Répondre

2

Effectuez les opérations suivantes dans le constructeur de votre contrôle utilisateur (après InitializeComponent) et votre bloc de texte doit être conscient de son contexte de données:

this.DataContext = this; 
+0

Cela ne fonctionne pas, le contrôle utilisateur lui-même n'a pas de propriété 'StupidText'. Il suppose également qu'il n'y a pas d'autres contrôles présents qui doivent se lier à la source de données typique à partir du DataContext. La liaison d'élément à élément est la solution ici. – AnthonyWJones

+0

Vous avez tort. StupidText * est * une propriété du contrôle utilisateur lui-même, et ma suggestion fonctionne très bien. –

0

Donnez votre Stupid contrôle un nom: -

<Local:Stupid x:Name="MyStupid" StupidText="My Stupid Text" /> 

Ensuite, vous pouvez utiliser l'élément de fixation comme ceci: -

<TextBlock Text="{Binding StupidText, ElementName=MyStupid}" /> 
Questions connexes