ComboBox SelectedItem与SelectedValue
以下代码按预期工作,MyProperty
当用户在下拉列表中选择新项目时,模型上的代码就会更新。
comboBox1.DataBindings.Add("SelectedValue", myModel, "MyProperty", true,DataSourceUpdateMode.OnPropertyChanged);
但是,以下操作不能以相同的方式工作,并且只有在输入焦点移至表单上的另一个控件时才触发模型更新:
comboBox1.DataBindings.Add("SelectedItem", myModel, "MyProperty", true, DataSourceUpdateMode.OnPropertyChanged);
有人知道为什么吗?我什至不知道从哪里开始调查原因。朝着正确方向开始调查或直接进行解释的指针将同样受到赞赏。
撇开
:出于我的目的,我最终绑定到SelectedItem
和SelectedValue
。这样,我就可以基于UI更改(通过SelectedValue
绑定)获得即时模型更新,并且可以基于程序化模型更改(通过SelectedItem
绑定)获得UI更新。
回答:
该ComboBox
控件继承自该ListControl
控件。
该SelectedItem
属性是ComboBox
控件的适当成员。更改触发的事件是ComboBox.SelectionChangeCommitted
当所选项目已更改并且在ComboBox中显示该更改时发生。
该SelectedValue
属性是从ListControl
控件继承的。因此,此属性将触发ListControl.SelectedValueChanged
事件。
在SelectedValue属性更改时发生。
也就是说,他们不会解雇INotifyPropertyChanged
。PropertyChanged
事件相同,但无论如何都会如此。唯一的区别是触发事件。SelectedValueChanged
从组合框的列表部分中做出新选择后立即触发,并在组合框SelectedItemChanged
的文本框部分中显示该项目时触发。
简而言之,它们都代表了ComboBox列表部分中的某些内容。因此,绑定任何一个属性时,结果都是相同的,因为PropertyChanged
无论哪种情况都会触发该事件。并且由于它们都代表列表中的一个元素,因此它们可能会被视为相同。
这有帮助吗?
假设ComboBox的列表部分代表一个属性(由于我没有编写控件,所以我无法确认),绑定SelectedItem
或SelectedValue
影响控件内的同一集合。然后,当更改此属性时,最后也会发生相同的情况。该INotifyPropertryPropertyChanged.PropertyChanged
事件在同一媒体资源上触发。
以上是 ComboBox SelectedItem与SelectedValue 的全部内容, 来源链接: utcz.com/qa/423616.html