gpt4 book ai didi

c# - ComboBox SelectedItem 与 SelectedValue

转载 作者:IT王子 更新时间:2023-10-29 03:51:58 26 4
gpt4 key购买 nike

以下代码按您预期的方式工作——当用户在下拉列表中选择一个新项目时,模型上的 MyProperty 会更新。

comboBox1.DataBindings.Add("SelectedValue", myModel, "MyProperty", true,
DataSourceUpdateMode.OnPropertyChanged);

但是,下面的方法并不相同,并且在输入焦点移动到表单上的另一个控件之前不会触发模型更新:

comboBox1.DataBindings.Add("SelectedItem", myModel, "MyProperty", true, 
DataSourceUpdateMode.OnPropertyChanged);

有人知道为什么吗?我什至不知道从哪里开始调查原因。如果能指出开始调查的正确方向或提供明确的解释,我们将同样感激不尽。

旁白:出于我的目的,我最终绑定(bind)到 SelectedItemSelectedValue。通过这种方式,我可以获得基于 UI 更改(通过 SelectedValue 绑定(bind))的即时模型更新,以及基于编程模型更改(通过 SelectedItem 绑定(bind))的 UI 更新。

最佳答案

ComboBox控件继承自 ListControl控制。

SelectedItem属性是 ComboBox 控件的适当成员。更改时触发的事件是 ComboBox.SelectionChangeCommitted

ComboBox.SelectionChangeCommitted

Occurs when the selected item has changed and that change is displayed in the ComboBox.

SelectedValue属性继承自 ListControl 控件。因此,此属性将触发 ListControl.SelectedValueChanged事件。

ListControl.SelectedValueChanged

Occurs when the SelectedValue property changes.

也就是说,他们不会解雇 INotifyPropertyChanged . PropertyChanged事件相同,但无论如何他们都会。唯一的区别在于触发事件。 SelectedValueChanged 在从 ComboBox 的列表部分做出新选择时立即触发,而 SelectedItemChanged 在项目显示在 ComboBox 的 TextBox 部分时触发。

简而言之,它们都代表了ComboBox 列表部分的一些东西。因此,绑定(bind)任一属性时,结果都是相同的,因为在任一情况下都会触发 PropertyChanged 事件。由于它们都代表列表中的一个元素,因此它们可能被同等对待。

这有帮助吗?

编辑#1

假设 ComboBox 的列表部分表示一个属性(我无法确认,因为我没有编写控件),绑定(bind) SelectedItemSelectedValue 影响控件内的同一集合。然后,当更改此属性时,最终会发生相同的情况。 INotifyPropertryPropertyChanged.PropertyChanged 事件在同一属性上触发。

关于c# - ComboBox SelectedItem 与 SelectedValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2883481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com