2011-06-01 4 views
0

J'ai un contrôle Silverlight personnalisé (4), semblable à une grille de données. Ce contrôle a une propriété appelée ColumnConfiguration. Lors de l'utilisation de ce contrôle dans une application de navigation, le composant ColumnConfiguration est de nouveau ajouté (via XAML), tout en conservant ses anciennes colonnes, le résultat est que deux fois la quantité normale de colonnes est ajoutée au contrôle.Les éléments sont ajoutés deux fois dans l'application de navigation

public ColumnCollection ColumnConfiguration 
{ 
    get { return (ColumnCollection)GetValue(ColumnConfigurationProperty); } 
    set { SetValue(ColumnConfigurationProperty, value); } 
} 

public class ColumnCollection : Collection<ColumnBase> { } 

Comment puis-je empêcher l'ajout de ces colonnes au contrôle?

XAML est comme ceci:

<my:Control.ColumnConfiguration> 
<my:ColumnTypeA Width="*" MinWidth="50"> 
</my:ColumnTypeA> 
<my:ColumnTypeB Width="2*" MinWidth="50"> 

</my:ColumnTypeB> 
<my:ColumnTypeB Width="2*" MinWidth="50"> 

</my:ColumnTypeB> 
<my:ColumnTypeB Width="*" MinWidth="50"> 

</my:ColumnTypeB> 
<my:ColumnTypeB Width="2*" MinWidth="50"> 

</my:ColumnTypeB> 
</my:Control.ColumnConfiguration> 
+1

Pourquoi ajoutez-vous les colonnes dans XAML et C#? – ChrisF

+0

il n'a pas ou a édité son poste ... – eFloh

+0

Je ne, ils ont été ajoutés deux fois par l'intermédiaire de XAML – Bas

Répondre

2

pourrait-il que vous avez fourni une valeur par défaut dans le DependencyProperty UIPropertyMetaData? Comme le DependencyProperty est statique, la valeur par défaut spécifiée ici sera la même (référence) pour toutes les instances de votre contrôle. Ceci est inoffensif lors de l'utilisation de types de valeur, mais lorsque votre propriété est un type de référence, vous devez définir sa valeur initiale en utilisant le .ctor() de votre contrôle (ou tout autre chemin d'instance) afin de créer des valeurs initiales individuelles.

Je suppose que vous avez ce contrôle deux fois instancié dans votre application, supposément en utilisant MVVM DataTemplate? La première instance ajoutera des colonnes au ColumnCollection statique créé en utilisant la valeur par défaut et le secod utilisera également cette même instance.

Vous pouvez le vérifier en regardant la valeur par défaut ToString() de votre ColumnCollection, elle contiendra une valeur de hachage pour la référence.

Pour résoudre ce problème, définissez simplement la valeur par défaut de ColumnConfigurationProperty sur null.

+1

Et initialisent la propriété de collection dans le constructeur et rendent la propriété lue seulement. –

+0

Merci! cela m'a sauvé un mal de tête – Bas

Questions connexes