我正在尝试将Dictionary绑定到ListView,该ListView是具有2个文本框的网格的项模板constist。理想情况下,我希望能够修改ListView中显示的KeyValuePair的键和值。那可能吗?
答案 0 :(得分:2)
如果你看一下KeyValuePair实现它是一个结构,其中Key和Value都是readonly属性,所以我的猜测是在这种情况下不可能进行TwoWay绑定。
如果你创建了一个继承INotifyPropertyChange的类来处理字典,那么在更改键时添加和删除项目,或者只在更改值时更改值也许它可以正常工作。
答案 1 :(得分:2)
您正在寻找的东西类似于ObservableCollection<T>
,但对于字典而言。一些谷歌搜索从Dr. WPF on building an ObservableDictionary
发现了以下内容:
优点和缺点
使用可观察字典的好处当然是字典可以作为数据绑定控件的ItemsSource,您仍然可以像访问任何其他字典一样访问代码中的字典。它确实是一个索引的对象字典。 在使字典可观察的想法中肯定存在一些固有的局限性。字典是为了速度而建。当您将可观察集合的行为强加于字典以便框架可以绑定到它时,会增加开销。
此外,字典通过相同名称的单独属性公开其
Values
和Keys
集合。这些集合分别是Dictionary<TKey, TValue>.ValueCollection
和Dictionary<TKey, TValue>.KeyCollection
类型。这些CLR定义的集合是不可观察的。因此,您无法直接绑定到Values集合或Keys集合,并期望接收动态集合更改通知。您必须直接绑定到可观察词典。
现在,您可能会遇到更新密钥的问题,因为您需要以某种方式说服字典移动您的项目。我建议服用WPF博士的ObservableDictionary
,而不是使用KeyedCollection
作为后备存储。这样,Key就是从Item本身派生出来的,而更新会自动在ObservableDictionary
中移动对象。