2009-12-03 78 views
4

我正试图将一个字典绑定到一个ListView,它是一个带有2个文本框的网格的项目模板常量。理想情况下,我希望能够修改ListView中显示的KeyValuePair的键值和值。那可能吗?Dictionary到ListView TwoWay绑定 - 可能吗?

+0

是的,但我不明白的方式来做到这一点没有intemedite类,就像一个视图模型。你直接绑定到字典是至关重要的吗? – angrifel 2009-12-03 22:47:23

+0

这是首选。字典应该保存我的应用程序的设置等。 – Maciek 2009-12-03 22:59:38

回答

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中的对象。

+0

我以前见过ObservableDictionary,但我没有运气2主要是由于密钥是只读的 – Maciek 2009-12-04 08:46:25

+0

因此,您应该使用KeyedCollection,该KeyedCollection从该项目派生密钥。通过这种方式,您可以绑定到包含关键字的项目属性,并且字典将相应地进行更新(也许)。 – user7116 2009-12-04 14:46:29

2

如果你看KeyValuePair实现它是一个键和值为只读属性的结构,所以我的猜测是在这种情况下无法进行双向绑定。

如果你犯了一个类继承INotifyPropertyChange,处理字典添加和删除的项目,当您更改键或只有当你正在改变也许值它的工作原理更改值。

+0

您好,我无法访问该链接。 – Maciek 2009-12-03 23:00:16

+0

OK我刷新链接,去那里,点击每个键和值的属性,你会看到他们是只读,只得到的是实现 – jmayor 2009-12-03 23:10:04

相关问题