WPF中如何获取已绑定ListBox选中项的指定属性GrupoID
场景与需求说明
- 页面内存在命名为
ListBoxGrupos的ListBox控件,绑定的数据源为ProdutoGrupoViewModel,对应XAML实现代码如下:
<ListBox HorizontalAlignment="x:Name="ListBoxGrupos" ItemsSource="{Binding ProdutoGrupoViewModel}" SelectionChanged="ListBoxGrupos_SelectionChanged"> <ListBox.ItemTemplate> <DataTemplate x:Name="ListViewGrupos"> <StackPanel> <TextBlock Text="{Binding Descricao}"/> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
- 后台
xaml.cs代码中,可通过ListBoxGrupos.SelectedItem属性获取当前选中项对应的对象,该对象包含的公开属性示例如下:Descricao = "Pizzas"GrupoCor = "FF8040"GrupoID = 3Image = "..."Position = "0"
注:原提问者本打算上传该对象的结构截图,但因账号声望不足无法上传,因此以文字形式描述对象结构。
核心需求:如何从ListBox选中项对应的对象中,获取GrupoID属性的实际值?
实现方案
直接对SelectedItem做强类型转换后访问对应属性即可:
- 明确绑定项类型:ListBox的
ItemsSource绑定的是ProdutoGrupoViewModel类型的集合,选中项本质就是该类型的实例,本身就公开了GrupoID属性 - 在
SelectionChanged事件的后台处理方法中,通过类型判断+模式匹配的方式获取选中项实例,直接读取属性即可,示例代码:private void ListBoxGrupos_SelectionChanged(object sender, SelectionChangedEventArgs e) { // 判空+类型判断,避免空引用、类型转换异常 if (ListBoxGrupos.SelectedItem is ProdutoGrupoViewModel selectedItem) { // 直接读取GrupoID属性值 int targetGrupoId = selectedItem.GrupoID; // 后续可基于获取到的ID执行业务逻辑 } } - 注意要点:
- 优先使用模式匹配做类型转换,不要直接做强制类型转换,避免控件选中项为null或类型不匹配时触发运行时异常
- 无需通过反射方式动态读取属性,绑定的数据源为强类型ViewModel,直接访问属性的性能和可维护性最高
- 若后台代码无法识别
ProdutoGrupoViewModel类型,需先引入该类型所在的命名空间
内容的提问来源于stack exchange,提问作者Paulo Henrique Lopes
相关产品推荐
相关产品推荐

