我的数据绑定了我的MVVM Light Windows Phone 7应用程序中的ListBox,并希望在用户单击ListBox中的项目时在我的视图模型中调用命令。
我正在使用EventToCommand行为执行此操作并且一切都很好,除非我无法传递与单击的列表元素关联的数据项,如果我使用MouseLeftButtonDown事件...
如果我使用SelectionChanged事件,那么我可以将行为的CommandParameter绑定到ListBox的SelectedItem,但我真的想使用MouseLeftButtonDown事件。
有什么想法吗?我不想通过设置“PassEventArgsToCommand”选项来污染我的View Model,并且无论如何我不确定我是否可以从MouseButtonEventArgs中获取所选数据项。
现在我正朝着在代码隐藏中设置一个事件处理程序,并从那里调用ViewModel,使用“sender”来获取数据项。
谢谢,
Damian
答案 0 :(得分:0)
看起来问题实际上没有意义 - 在ListBox上触发的MouseLeftButtonDown事件与ListBox中的特定项目无关。
相反,我希望在与ListBox关联的ItemTemplate上连接这个事件。
答案 1 :(得分:0)
Jesse Liberty在这里给出了一个很好的例子:Passing Parameters...
但是如果你使用的是Windows Phone 7.5,你必须改变一件事,就是你不能再使用Galasoft EventToCommand语法了,如下例所示:
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<!--<GalaSoft_MvvmLight_Command:EventToCommand x:Name="SelectionCommand" Command="{Binding SwitchProfileCommand, Mode=OneWay}" CommandParameter="{Binding SelectedItem, ElementName=lboxProfiles}"/>-->
<i:InvokeCommandAction Command="{Binding SwitchProfileCommand, Mode=OneWay}" CommandParameter="{Binding SelectedItem, ElementName=lboxProfiles}" />
</i:EventTrigger>
此外,对于Windows Phone 7.5,请查看http://windowsphonegeek.com/articles/ListBox-ContextMenu-with-MVVM-in-Windows-Phone以获取使用链接到每个项目的上下文菜单的命令。