WPF,双向绑定到哈希表

时间:2009-07-27 20:30:23

标签: wpf data-binding

我从datatemplate中绑定到哈希表的值,并且值显示正常,但是当我在文本框中进行更改时,更改不会持久保存到对象。知道为什么会这样吗?

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

感谢您的时间

1 个答案:

答案 0 :(得分:2)

这不起作用,因为您使用的是Hashtable,它不支持INotifyPropertyChanged。您应该绑定到ObservableCollection,而不是绑定到哈希表,ObservableCollection将为您处理所有更改通知。如果必须使用类似哈希表的行为,则可以简单地扩展ObservableCollection并覆盖InsertItem和SetItem方法。这是一个例子:

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);
   }
}