ListBox等控件的SelectedItem,SelectedValue,SelectedValuePath属性详解

引言

初学WPF可能会对诸如ComboBox、ListBox等集合控件的当前选择项的绑定有所疑惑,控件提供了两个可绑定对象:SelectedItem\SelectedValue,同时还有DisplayMemberPath\SelectedValuePath。本节来讲述一下它们的设计意图和用法。

1、SelectedItem与DisplayMemberPath

在Winform中,我们经常用到SelectedItem,它表示的就是当前控件的选择项。若你给控件的Itemsource绑定到集合List<Person>、ObservableCollection<Person>等,当前SelectedItem即为某一个Person,这样的说明略显苍白冗余。记住此刻我们SelectedItem指代的是整个Person实例。

DisplayMemberPath 可以进一步指定控件中显示Person的有一个属性。如果不设置DisplayMemberPath,控件会调用Person的ToString()方法,显示结果。

cs 复制代码
<ListBox 
    Name="PersonListBox"
    SelectedIndex="0"
    SelectedItem="{Binding SelectedPerson}"
    DisplayMemberPath="Name"
    ItemsSource="{Binding Persons}"/>

2、SelectedValue与SeletedValuePath

WPF除了绑定ViewModel的属性,还可以绑定xmal元素的属性,当我们需要绑定当前选择项Person时我们可以通过ElementName查找等方法找到比如ComboBox、ListBox的SelectedItem。如果需要关注Person的某一个属性,则要写成SelectedItem.ID、SelectedItem.Name等形式。

cs 复制代码
<TextBlock Text="{Binding ElementName=PersonListBox,Path=SelectedItem.Name}"/>

现在增加需求,我们想要在ViewModel中直接观察当前选中Person的某一个属性 ,比如Name\ID等,或则后台通过更改当前CurrentPersonID实现当前选项的更改时,可能就比较麻烦,此时WPF为我们提供的SelectedValue和SelectedValuePath就派上用场了。

SelectedValuePath用来指定你要对外绑定的Person属性名称,SelectValue用来绑定该属性。

cs 复制代码
//vm
public string CurrentPersonID{get;set;}

//xaml
<ListBox 
    Name="PersonListBox"
    SelectedIndex="0"
    SelectedItem="{Binding SelectedPerson}"
    SelectedValue="{Binding CurrentPersonID}"
    SelectedValuePath="ID"
    ItemsSource="{Binding Persons}"/>

<TextBlock Text="{Binding CurrentPersonID}"/>

注:SelectedValue是支持双向绑定通知的

相关推荐
无所谓จุ๊บ4 小时前
使用AI整理知识点--WPF动画核心知识
c#·wpf
xcLeigh1 天前
WPF在特定领域的应用:打造一款专业的图像编辑工具
c#·wpf
吾与谁归in2 天前
WPF给ListBox中的每一项添加右键菜单功能
c#·wpf
千里码!2 天前
RocketMQ延迟消息深度解析:原理、实践与性能调优
wpf·rocketmq
de之梦-御风3 天前
【.NET】WinForms 和 WPF 在性能方面的对比
.net·wpf
Zzu_zzx3 天前
c# wpf 开发中安装使用SqlSugar操作MySql数据库具体操作步骤保姆级教程
mysql·c#·wpf
白白白白纸呀3 天前
WPF框架---MvvmLight介绍
开发语言·c#·wpf
battlestar3 天前
WPF 解决加载顺序,Combox 增加属性,并关联text
windows·wpf
xcLeigh4 天前
WPF高级 | WPF 3D 图形编程基础:创建立体的用户界面元素
ui·3d·c#·wpf
一个处女座的程序猿O(∩_∩)O4 天前
鸿蒙与DeepSeek深度整合:构建下一代智能操作系统生态
华为·ai·wpf·harmonyos