字典到ListView TwoWay绑定 - 可能吗?

时间:2009-12-03 22:39:00

标签: c# wpf listview binding two-way-binding

我正在尝试将Dictionary绑定到ListView,该ListView是具有2个文本框的网格的项模板constist。理想情况下,我希望能够修改ListView中显示的KeyValuePair的键和值。那可能吗?

2 个答案:

答案 0 :(得分:2)

如果你看一下KeyValuePair实现它是一个结构,其中Key和Value都是readonly属性,所以我的猜测是在这种情况下不可能进行TwoWay绑定。

如果你创建了一个继承INotifyPropertyChange的类来处理字典,那么在更改键时添加和删除项目,或者只在更改值时更改值也许它可以正常工作。

答案 1 :(得分:2)

您正在寻找的东西类似于ObservableCollection<T>,但对于字典而言。一些谷歌搜索从Dr. WPF on building an ObservableDictionary发现了以下内容:

  

优点和缺点

     

使用可观察字典的好处当然是字典可以作为数据绑定控件的ItemsSource,您仍然可以像访问任何其他字典一样访问代码中的字典。它确实是一个索引的对象字典。   在使字典可观察的想法中肯定存在一些固有的局限性。字典是为了速度而建。当您将可观察集合的行为强加于字典以便框架可以绑定到它时,会增加开销。

     

此外,字典通过相同名称的单独属性公开其ValuesKeys集合。这些集合分别是Dictionary<TKey, TValue>.ValueCollectionDictionary<TKey, TValue>.KeyCollection类型。这些CLR定义的集合是不可观察的。因此,您无法直接绑定到Values集合或Keys集合,并期望接收动态集合更改通知。您必须直接绑定到可观察词典。

现在,您可能会遇到更新密钥的问题,因为您需要以某种方式说服字典移动您的项目。我建议服用WPF博士的ObservableDictionary,而不是使用KeyedCollection作为后备存储。这样,Key就是从Item本身派生出来的,而更新会自动在ObservableDictionary中移动对象。