Ada*_*ear 51 c# data-binding combobox winforms
以下代码按预期工作 - MyProperty当用户在下拉列表中选择新项目时,模型会更新.
comboBox1.DataBindings.Add("SelectedValue", myModel, "MyProperty", true,
DataSourceUpdateMode.OnPropertyChanged);
Run Code Online (Sandbox Code Playgroud)
但是,以下方法的工作方式不同,并且在输入焦点移动到窗体上的另一个控件之前不会触发模型更新:
comboBox1.DataBindings.Add("SelectedItem", myModel, "MyProperty", true,
DataSourceUpdateMode.OnPropertyChanged);
Run Code Online (Sandbox Code Playgroud)
有人知道为什么吗?我甚至不知道从哪里开始调查原因.指向正确方向开始调查或直接解释的指针同样值得赞赏.
除了:对于我而言,我最终结合两者SelectedItem和SelectedValue.这样我就可以根据UI更改(通过SelectedValue绑定)获得即时模型更新,并根据程序模型更改(通过SelectedItem绑定)进行UI更新.
Wil*_*ler 42
该ComboBox控制从继承ListControl控制.
该SelectedItem属性是ComboBox控件的适当成员.在更改时触发的事件是ComboBox.SelectionChangeCommitted
ComboBox.SelectionChangeCommitted
当所选项目发生更改并且更改显示在ComboBox中时发生.
该SelectedValue属性继承自ListControl控件.因此,此属性将触发该ListControl.SelectedValueChanged事件.
ListControl.SelectedValueChanged
SelectedValue属性更改时发生.
也就是说,他们不会解雇INotifyPropertyChanged.PropertyChanged事件相同,但他们无论如何.唯一的区别在于射击事件.SelectedValueChanged一旦从ComboBox的列表部分进行新选择就会SelectedItemChanged触发,并在项目显示在ComboBox的TextBox部分时触发.
简而言之,它们都代表了ComboBox列表部分中的某些内容.因此,绑定任一属性时,结果是相同的,因为PropertyChanged在任何一种情况下都会触发事件.由于它们都代表了列表中的元素,因此它们可能被视为相同.
这有帮助吗?
编辑#1
假设ComboBox的列表部分代表一个属性(由于我没有写控件,因此我无法确认),绑定控件内的同一个集合SelectedItem或SelectedValue影响它.然后,当更改此属性时,最终会发生相同的情况.该INotifyPropertryPropertyChanged.PropertyChanged事件在同一财产上被解雇.
我怀疑ComboBox的SelectedItem属性在控件验证之前不会改变(控件失去焦点时会发生),而只要用户选择一个项目,SelectedValue属性就会改变.
以下是对控件发生的焦点事件的引用:
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.validated.aspx
| 归档时间: |
|
| 查看次数: |
117648 次 |
| 最近记录: |