我正在尝试将 Dictionary 绑定到 ListView,该 ListView 的项目模板由具有 2 个文本框的网格组成。理想情况下,我希望能够修改 ListView 中显示的 KeyValuePair 的键和值。那可能吗?
2 回答
如果您查看KeyValuePair实现,它是一个结构,其中 Key 和 Value 作为只读属性,所以我的猜测是在这种情况下不可能进行双向绑定。
如果您创建一个继承 INotifyPropertyChange 的类,该类在您更改键时处理字典添加和删除项目,或者仅在您更改值时更改值,那么它可能会起作用。
你正在寻找的是类似于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
自动移动对象。