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

WPF MVVM框架下如何实现ListBox单击Item弹出窗口?

实现WPF ListBox单击项弹出窗口(MVVM模式)

这事儿超简单!你现在用的是MouseDoubleClick触发命令,只要把触发事件换成对应的单击类事件就行,给你两种常用方案,按需选择:

方案1:选中项变化时触发(适合只需新选项弹窗的场景)

如果你的需求是用户选中新的项时才弹窗,直接把事件换成SelectionChanged就搞定:

<i:Interaction.Triggers>
    <i:EventTrigger EventName="SelectionChanged">
        <i:InvokeCommandAction Command="{Binding OpenPopUpCommand}"/>
    </i:EventTrigger>
</i:Interaction.Triggers>

⚠️ 注意:如果用户重复单击已经选中的项,这个事件不会再次触发,因为选中状态没发生变化。

方案2:每次单击项都触发(适合任意单击都弹窗的场景)

要是你需要不管项是否已经选中,只要单击就弹窗,就用PreviewMouseLeftButtonDown事件,还能顺便把单击的项传给ViewModel:

<i:Interaction.Triggers>
    <i:EventTrigger EventName="PreviewMouseLeftButtonDown">
        <i:InvokeCommandAction Command="{Binding OpenPopUpCommand}" 
                               CommandParameter="{Binding SelectedItem, RelativeSource={RelativeSource AncestorType=ListBox}}"/>
    </i:EventTrigger>
</i:Interaction.Triggers>

这里加的CommandParameter能帮你把当前选中的项传递到命令里,方便你在ViewModel中处理具体的项数据。另外如果怕点击ListBox空白区域也触发命令,只要在OpenPopUpCommand的执行逻辑里判断一下参数是否为空,为空就不弹窗就行。

小补充

你也可以用MouseLeftButtonUp事件实现类似效果,不过PreviewMouseLeftButtonDown是路由事件,触发时机更早,响应会更及时~

内容的提问来源于stack exchange,提问作者JINESH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:23:56