4

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

4

2 回答 2

2

如果您查看KeyValuePair实现,它是一个结构,其中 Key 和 Value 作为只读属性,所以我的猜测是在这种情况下不可能进行双向绑定。

如果您创建一个继承 INotifyPropertyChange 的类,该类在您更改键时处理字典添加和删除项目,或者仅在您更改值时更改值,那么它可能会起作用。

于 2009-12-03T22:49:15.700 回答
2

你正在寻找的是类似于ObservableCollection<T>字典的东西。一些谷歌搜索从WPF 博士ObservableDictionary那里发现了以下关于构建:

优点和缺点

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

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

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

于 2009-12-03T23:24:58.633 回答