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
相关产品推荐
相关产品推荐

