2009-04-21 6 views
0

Fondamentalement, j'ai une liste de couleurs et un DataTemplate défini pour l'élément listbox:modèle Réapplication pour objet ListBox programatically

<DataTemplate x:Key="colorItemDataTemplate"> 
    <Border x:Name="borderInner" BorderBrush="Black" BorderThickness="1" Background="{Binding Brush}" Width="11" Height="11" /> 
</DataTemplate> 

Maintenant, quand j'ajoute un tas d'éléments dans la zone de liste puis définissez la zone de liste. Propriété ItemsSource à ma liste, la zone de liste est remplie correctement.

Il existe également un curseur avec son gestionnaire d'événements approprié. Dans le gestionnaire d'événements, la propriété Brush de l'un des éléments de la zone de liste est modifiée. Étant donné que l'apparence de l'élément dépend de la propriété Brush, la zone de liste doit refléter la modification.

Je pourrais réinitialiser la propriété ItemsSource, mais tous les éléments ont leurs modèles appliqués et avec plus de 200 éléments dans la zone de liste, c'est assez lent.

Alors, existe-t-il un moyen d'actualiser le modèle pour un seul élément de la liste?

Thanx

Répondre

1

Je ne suis pas sûr que je suis. Si vous avez lié le Background à la propriété, la modification de la propriété doit automatiquement supprimer l'arrière-plan du ListBoxItem. Si vous ne voyez pas cela, assurez-vous que vous utilisez un DependencyProperty ou que vous implémentez INotifyPropertyChanged.

+0

merci, cela a fonctionné. J'ai implémenté INotifyPropertyChanged et cela fonctionne comme vous le souhaitez. –

0

Vous pouvez utiliser un convertisseur de liaison. Dans la classe de convertisseur, vous pourriez avoir une certaine logique comme

(pseudo-code) 
if (ListBoxItem.IsSelected) 
    return SpecialColorFromSlider 
else 
    return NormalListBoxColor 
Questions connexes