2009-07-27 7 views
1

Je lie les valeurs d'une table de hachage à l'intérieur d'un datatemplate et les valeurs s'affichent correctement, mais les modifications ne sont pas conservées dans l'objet lorsque j'effectue des modifications dans une zone de texte par exemple. Une idée de pourquoi c'est?WPF, liaison bidirectionnelle à une table de hachage

<DataTemplate x:Key="ResponseItemTemplate"> 
     <StackPanel Orientation="Horizontal" > 
      <TextBox Width="200" Text="{Binding Path=Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
     </StackPanel> 
    </DataTemplate> 

Merci pour votre temps

+0

Avez-vous essayé UpdateSourceTrigger = Explicit? –

+0

Explicit met à jour la source de liaison uniquement lorsque vous appelez la méthode UpdateSource. Donc ça ne va certainement pas l'aider ici. – Charlie

Répondre

2

Cela ne fonctionnera pas parce que vous utilisez un Hashtable, qui ne supporte pas INotifyPropertyChanged. Au lieu de vous lier à une table de hachage, vous devez vous lier à une ObservableCollection, qui traitera toutes les notifications de modification pour vous. Si un comportement de type hashtable est indispensable, vous pouvez simplement étendre ObservableCollection et remplacer les méthodes InsertItem et SetItem. En voici un exemple:

public class SetCollection<T> : ObservableCollection<T> 
{ 
    protected override void InsertItem(int index, T item) 
    { 
     if (Contains(item)) 
     throw new ItemExistsException(item); 

     base.InsertItem(index, item); 
    } 

    protected override void SetItem(int index, T item) 
    { 
     int i = IndexOf(item); 
     if (i >= 0 && i != index) 
     throw new ItemExistsException(item); 

     base.SetItem(index, item); 
    } 
} 
Questions connexes