2010-07-29 4 views
0

J'ai une zone de liste que j'essaie de remplir avec une liste de zones de visualisation. La liste de sélection prend dans la liste sans problème. Toutefois, lorsque ma fonction atteint sa fin, je reçois l'erreur:Affichage d'une zone de liste de zones de visualisation

"Doit déconnecter l'enfant spécifié du Visual parent actuel avant de l'attacher au nouveau parent Visual." Les viewbox sont créées à partir de la même vue initiale, puis éditées, ce qui, selon moi, peut être mon problème.

for(...) 
{ 
     Viewbox newviewbox = (Viewbox)myViewbox; //myViewbox created in XAML 
     // edits newviewbox here 
     viewboxlist.Add(newviewbox); //viewboxlist created upon initialization 
     newviewbox = null; 
    } 
myListBox.ItemsSource = viewboxlist; 

Un conseil est grandement apprécié.

Merci.

Répondre

1

Vous ne créez pas de nouvelles zones de visualisation, vous ne faites que référencer la même zone de vue et l'ajouter plusieurs fois à la liste. Ainsi, l'erreur que la vue a déjà un parent et doit être déconnectée avant de l'assigner à un nouveau parent.

Vous devez créer de nouvelles instances de ViewBox comme ceci:

var newViewBox = new ViewBox(); 
+0

Merci à vous deux pour la réponse rapide. Peter, si je crée une nouvelle viewbox à chaque itération de la boucle for, puis-je toujours définir les nouvelles viewboxes égales à celle définie dans XAML? Je le fais actuellement, et reçois toujours la même erreur. var newviewbox = new ViewBox(); newviewbox = myViewbox Si ce n'est pas le cas, existe-t-il une solution de contournement pour utiliser cette vue initiale en tant que modèle? (La liaison ne fonctionnera pas car j'ai besoin d'utiliser les paramètres du code derrière ... Je pense) Merci beaucoup. – andrew

+0

Bien sûr, vous obtenez la même erreur, vous ne créez pas une nouvelle copie de l'élément, vous copiez seulement la * référence * dans le même élément. Vous devriez jeter l'élément dans xaml et créer/initialiser de nouvelles instances à chaque itération (oui, toutes les propriétés que vous avez précédemment définies dans xaml peuvent également être définies avec du code). Ou plus préférablement, vous pouvez opter pour la liaison de données et utiliser un élément dans xaml comme modèle. Vous devriez lire sur la liaison de données et les modèles de données pour avoir une idée de cela, c'est une fonctionnalité très puissante de wpf. –

0

Un Visual ne peut avoir l'un des parents. Dans votre code, vous prenez un Visual existant et essayez de l'ajouter à un autre parent (le ListBox), donc cela ne peut pas fonctionner. Vous devez soit le retirer du parent d'origine, ou en créer un nouveau

Questions connexes