2009-12-17 3 views
1

Je vais préfacer et dire que je suis nouveau au développement Silverlight d'environ la semaine, donc je suis très probablement faire mal ...Silverlight problèmes de fixation du contenu des étiquettes

Quoi qu'il en soit j'ai une étiquette et une zone de texte fait jusqu'à thusly en XAML:

<dataInput:Label Target="{Binding ElementName=JobCode}" Height="18" HorizontalAlignment="Left" Margin="15,7,0,0" Name="lableJobCode" VerticalAlignment="Top" Width="250" FontWeight="Bold" Grid.Column="1" /> 
<TextBox Height="23" Text="{Binding SelectedRole.Job_Code}" HorizontalAlignment="Left" Margin="15,31,0,0" Name="JobCode" VerticalAlignment="Top" Width="277" Grid.Column="1" IsReadOnly="{Binding IsNotAdmin}" /> 

Tout fonctionne très bien, la seule question que j'ai est que la liaison que je fais sur l'attribut IsReadOnly qui va à un booléen dans mon ViewModel qui est définie en fonction d'un appel à un service d'authentification, remplace maintenant l'étiquette Content par le nom de ma propriété ViewModel: IsNotAdmin. Je n'arrive pas à trouver un moyen de spécifier la source de liaison de données pour extraire le contenu d'étiquette MetaData. Peut-être qu'il me manque quelque chose sur la façon de manipuler le contrôle editablity/visibilité de mon ViewModel.

--update: La classe source de données que la zone de texte est lié à est la suivante (pour les parties concernées):

public class RoleSummary { 

    [Display(Name= "Job Code (To be Completed by HR):")] 
    public string Job_Code { get; set; } 

Sans la liaison à l'IsReadOnly attribut l'étiquette affiche le texte à partir des données annotation très bien. Lorsque j'ajoute la liaison il affiche "IsNotAdmin"

+0

Voir ma modification ci-dessous, qui devrait prendre soin de cela. –

Répondre

1

pouvez-vous poster plus de votre code? Je ne suis pas tout à fait sûr de ce que vous essayez de faire, alors il est difficile de proposer une solution.

Je suppose que vous essayez de créer un élément de saisie de texte sur lequel une validation est effectuée (d'où l'étiquette) - mais que doit exactement être l'étiquette pour son contenu?

EDIT: J'ai compris cela. Le contrôle d'étiquette examine par défaut toutes les propriétés de son datacontext à la recherche de métadonnées qu'il peut utiliser. Pour une raison quelconque, il a décidé d'utiliser les métadonnées de la propriété IsNotAdmin dans votre code (même si vous ne l'avez pas défini manuellement, je suppose que la métadonnée Display reçoit une valeur par défaut du nom de la propriété). texte de l'étiquette.

Microsoft a mis dans un spécificateur de propriété dans les contrôles de données afin que vous puissiez le dire quelle propriété il devrait utiliser pour la recherche de métadonnées: PropertyPath

Essayez comme ceci:

<dataInput:Label Target="{Binding ElementName=JobCode}" PropertyPath="SelectedRole.Job_Code" Height="18" HorizontalAlignment="Left" Margin="15,7,0,0" Name="lableJobCode" VerticalAlignment="Top" Width="250" FontWeight="Bold" Grid.Column="1" /> 
<TextBox Height="23" Text="{Binding SelectedRole.Job_Code}" HorizontalAlignment="Left" Margin="15,31,0,0" Name="JobCode" VerticalAlignment="Top" Width="277" Grid.Column="1" IsReadOnly="{Binding IsNotAdmin}" /> 

Tant que votre datacontext est correct (ce qui devrait être le cas) cela devrait fonctionner pour vous - cela a fonctionné dans mon échantillon que j'ai reconstruit à partir de votre code.

+0

Hi - la source de données de la zone de texte a l'attribut d'annotation de données Display (name =) appliqué à la propriété Job_Code et est défini sur "Code de travail (à compléter par HR)", ce qui s'affiche très bien si supprimer la liaison sur l'attribut IsReadOnly. Lorsque j'ajoute la liaison dans l'étiquette affiche "IsNotAdmin" – jemerick

+0

Awesome. Ça a marché. Merci! – jemerick

Questions connexes