2009-08-07 7 views
0

Another post décrit comment accéder à un codebehind variable en XAML.L'accès à l'objet codebehind dans XAML

Cependant, je voudrais accéder à une variable dans codebehind objet à partir de XAML. L'objet codebehind, appelé FeedData, est déclaré en tant que propriété de dépendance de type FeedEntry. Cette classe est juste une classe de conteneur avec des propriétés string et datetime.

propriété de Codebehind definitition est la suivante:

public FeedEntry FeedData 
     { 
      get { return (FeedEntry)GetValue(FeedDataProperty); } 
      set { SetValue(FeedDataProperty, value); } 
     } 
     public static readonly DependencyProperty FeedDataProperty = 
      DependencyProperty.Register("FeedData", typeof(FeedReaderDll.FeedEntry), typeof(FeedItemUserControl), 
      new FrameworkPropertyMetadata(new FeedEntry(){ Title="Hi!", Published=DateTime.Now })); 

En XAML je fais cela, ce qui ne fonctionne pas:

<UserControl x:Class="FeedPhysics.UserControls.FeedItemUserControl" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Height="40" Width="200" 
    Background="Blue" 
    DataContext="{Binding RelativeSource={RelativeSource Self}}" 
    x:Name="xRoot"> 
    <StackPanel> 
     <TextBlock Text="{Binding Title}" Foreground="White"/> 
     <TextBlock Text="{Binding Published}" Foreground="White"/> 
    </StackPanel> 
</UserControl> 

Mais si je redéfinissant le réglage datacontext de fenêtre dans le contructor de codebehind, il marchera! Comme ceci:

xRoot.DataContext = FeedData; 

Je comprends pourquoi cela fonctionne quand datacontext est défini dans codebehing. Mais j'aimerais trouver un moyen de saisir des variables dans un objet déclaré dans codebehind. Parce que, tout devrait être possible à partir de XAML, non?

Merci d'avance pour vos réponses.

Répondre

0

Essayez le réglage DataContext du StackPanel à l'objet feeddata:

<StackPanel DataContext="{Binding FeedData}"> 

...

Cela forcera le StackPanel à regarder le DependencyProperty, et tous les éléments, il sera référencé en tant que propriétés de FeedData. Tant que vous définissez le DataContext en tant que "FeedData" quelque part dans l'arbre logique au-dessus des éléments visuels que vous liez aux propriétés de celui-ci, cela fonctionnera.

+0

C'est tout! Merci pour l'aide! – Pompair

Questions connexes