You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 = 3
    • Image = "..."
    • Position = "0"

注:原提问者本打算上传该对象的结构截图,但因账号声望不足无法上传,因此以文字形式描述对象结构。

核心需求:如何从ListBox选中项对应的对象中,获取GrupoID属性的实际值?

实现方案

直接对SelectedItem做强类型转换后访问对应属性即可:

  1. 明确绑定项类型:ListBox的ItemsSource绑定的是ProdutoGrupoViewModel类型的集合,选中项本质就是该类型的实例,本身就公开了GrupoID属性
  2. 在SelectionChanged事件的后台处理方法中,通过类型判断+模式匹配的方式获取选中项实例,直接读取属性即可,示例代码:
    private void ListBoxGrupos_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        // 判空+类型判断,避免空引用、类型转换异常
        if (ListBoxGrupos.SelectedItem is ProdutoGrupoViewModel selectedItem)
        {
            // 直接读取GrupoID属性值
            int targetGrupoId = selectedItem.GrupoID;
            // 后续可基于获取到的ID执行业务逻辑
        }
    }
    
  3. 注意要点:
    • 优先使用模式匹配做类型转换,不要直接做强制类型转换,避免控件选中项为null或类型不匹配时触发运行时异常
    • 无需通过反射方式动态读取属性,绑定的数据源为强类型ViewModel,直接访问属性的性能和可维护性最高
    • 若后台代码无法识别ProdutoGrupoViewModel类型,需先引入该类型所在的命名空间

内容的提问来源于stack exchange,提问作者Paulo Henrique Lopes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 16:06:07