2011-05-18 7 views
1

J'ai un contrôle utilisateur silverlight qui est "lié" à un objet Document. la classe de document contient un tableau d'objets Field. L'intention est que lorsque le contrôle est lié à un document, chaque champ du document est lié à un contrôle dans le contrôle utilisateur. Chaque champ a un nom et le contrôle dans le contrôle utilisateur qui doit être lié à ce champ est donné le même nom (donc si le champ est appelé "FirstName" il y aura une zone de texte dans le contrôle utilisateur avec x: Name = "Prénom"). Afin de déterminer quel contrôle doit être lié à quel champ i utilisé le code suivant:Contrôle de l'onglet Silverlight, FindName ne fonctionne pas toujours correctement

private void BindDocumentToUserControl(Document document) 
{ 
    foreach (Field field in document.Fields) 
    { 
     Control c = this.FindName(field.Name); 

     if (c != null) 
     { 
      //bind control to field... 
     } 
    } 
} 

tout cela fonctionne bien jusqu'à ce que je tente de mettre les commandes dans un contrôle onglet. Lorsque le contrôle utilisateur est chargé (et que l'utilisateur n'a pas modifié lui-même l'onglet sélectionné), la méthode ci-dessus trouve tous les contrôles. Toutefois, si l'utilisateur modifie l'onglet sélectionné et réaffecte le contrôle, this.FindName trouvera uniquement les contrôles qui se trouvent dans l'onglet sélectionné. si je passe le nom d'un contrôle dans un autre onglet que je sais être correct, il retournera toujours null.

J'ai trouvé l'article ci-dessous concernant le même problème mais la solution n'est pas vraiment applicable pour ce que j'essaie de faire. toute aide serait grandement appréciée

http://forums.silverlight.net/forums/p/59912/248977.aspx

+0

Je ne peux pas proposer une solution, mais la raison en est que les éléments de l'onglet inactif ne sont pas rendus et FindName traverse l'arbre visuel, c'est pourquoi il échoue. Je n'ai pas vraiment compris ce que vous voulez réaliser, mais pour l'injection View Viewtime, je suggère de jeter un oeil à PRISM: http://compositewpf.codeplex.com/ – dain

Répondre

1

un peu comme un hack d'une réponse, vous ne pourriez pas charger les commandes pour chaque onglet à un panneau caché, un onglet à la fois, puis une fois les contrôles sont chargés, les déplacer dans l'onglet?

Je ne peux pas dire que cela fonctionne vraiment, mais il semble « logique », si un peu un hack sale ....

+1

work-around je suis venu avec est à peu près la même chose que cela . J'ai modifié le code qui appelle la méthode BindDocumentToUserControl ci-dessus. plutôt que de simplement l'appeler une fois qu'il passe en revue chaque élément de l'onglet dans le contrôle de tabulation et le définit comme l'onglet actif avant d'appeler la méthode. pas génial parce que cela signifie que tous les champs de documents sont itérés à travers pour chaque panneau, par opposition à une fois mais il fera pour l'instant –

Questions connexes