WPF之ComboBox的SelectedItem、SelectedValue、SelectedValuePath之差异

WPF之ComboBox的SelectedItem、SelectedValue、SelectedValuePath之差异WPF之ComboBox的SelectedItem、SelectedValue、SelectedValuePath之差异

WPF中的集合元素,比如ComboBox存在多个选择相关的属性,以下以ComboBox为例介绍以下这些属性的用法。

ComboBox的ItemsSource需要绑定一个集合类属性,比如界面元素类的DataContenx为BackViewModel对象,在BackViewModel类中定义了:ObservableCollection<Student> Students=….,可将Students绑定到ComboBox上。在ComboBox中,必须要显示在下拉列表框中的显示字段用DisplayMemberPath属性指出来,比如显示的为Name属性,则写法为:<ComboBox ItemsSource={Binding Sutdents},DisplayMemberPath=”Name”>。此时,该下拉列表框还不能接收选中的对象,为了接收选中的对象,需要将选中对象与程序的某个属性相互绑定。这时,可能有不同的绑定方式,可归纳为两种:

(1)第一种,将集合类中被Selected的成员直接绑定到BackViewModel对象的一个Student属性,比如名字为CurrentStudent,那么可以直接用SelectedItem进行绑定。

<ComboBox ItemsSource={Binding Sutdents},SelectedItem={Binding CurrentStudent},DisplayMemberPath=”Name”>

(2)第二中,如果程序不是直接将选中的对象绑定到Student类型的属性,而是绑定到Student成员类型的属性。例如Student含有Name、Gender、Age等属性,而只是需要绑定Name属性。这是,在BackViewModel类中定义一个string StudentName属性,然后利用SelectedValue和SelectedValuePath进行绑定,写法如下:

<ComboBox ItemsSource={Binding Sutdents},SelectedValue={Binding StudentName},SelectedValuePath=”Name”,DisplayMemberPath=”Name”>

也就是说,SelectedValue和SelectedValuePath应该是配对使用的,其作用是将集合对象中的被选中子对象的某个属性绑定到BackViewModel对象的某个属性,实现被选择对象的属性的实时记录。

        那么,默认情况下,SelectedValue/SelectedValuePath实现的是双向绑定吗,经过测试,答案确实是双向绑定的。不过,通过后台代码修改StudentName属性时,修改后的结果需要是Students所有成员的名字之一,否则ComboBox显示未选择状态(即显示为空的状态)。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/35288.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注