2012-08-26 1 views
0

Bonjour, j'ai un TreeView qui est lié à la collection ObservableCollectionEx. mon application est multi-thread et parfois je vois des entrées en double dans le TreeView.Liaisons en double

mon treeView ressemble à ceci:

<TreeView 
     ItemsSource="{Binding Titles}" 
     Margin="3" 
     ScrollViewer.VerticalScrollBarVisibility="Auto" 
     ScrollViewer.HorizontalScrollBarVisibility="Auto" 
     Style="{StaticResource TreeViewStyle}" 
     > 

et la source de l'élément de liaison est aussi:

ObservableCollectionEx<Title> 

fait, il arrive dans la classe des sous-titres dont le titre est propriétaire:

ObservableCollectionEx<Subtitle> Subtitles 

la mise à jour des Titres se fait via un délégué

Comment puis-je empêcher les éléments d'être dupe?
void Add_Title(object sender, TitleEventArgs e) { _titles.Add(e.Title); } 

+3

Veuillez fournir le code multithread qui remplit la source de vos éléments. –

Répondre

0

Il suffit d'ajouter un contrôle pour voir si l'élément existe déjà ou non avant de l'ajouter

void Add_Title(object sender, TitleEventArgs e) 
{ 
    if (!_titles.Contains(e.Title)) 
     _titles.Add(e.Title); 
} 

Si la collection pourrait être possible d'accéder par plusieurs threads, vous aurez probablement quelque chose à verrouiller la collection tandis que sa étant modifié aussi bien.

+0

Même si * peut * ne pas fonctionner sans verrou. –

+1

@MattBurland Vous avez raison, si la collection pouvait être modifiée par différents threads, alors quelque chose devrait être mis en place pour verrouiller la collection pendant qu'elle est modifiée. J'ai mis à jour ma réponse avec cela, bien que je ne sois pas sûr du code utilisé puisque je ne peux pas voir comment l'OP gère le thread dans sa question :) – Rachel