Mvvm Light ListBox MouseButtonLeftDown和EventToCommand - 如何传递点击的项目

时间:2010-11-06 20:38:39

标签: windows-phone-7 mvvm-light

我的数据绑定了我的MVVM Light Windows Phone 7应用程序中的ListBox,并希望在用户单击ListBox中的项目时在我的视图模型中调用命令。

我正在使用EventToCommand行为执行此操作并且一切都很好,除非我无法传递与单击的列表元素关联的数据项,如果我使用MouseLeftButtonDown事件...

如果我使用SelectionChanged事件,那么我可以将行为的CommandParameter绑定到ListBox的SelectedItem,但我真的想使用MouseLeftButtonDown事件。

有什么想法吗?我不想通过设置“PassEventArgsToCommand”选项来污染我的View Model,并且无论如何我不确定我是否可以从MouseButtonEventArgs中获取所选数据项。

现在我正朝着在代码隐藏中设置一个事件处理程序,并从那里调用ViewModel,使用“sender”来获取数据项。

谢谢,

Damian

2 个答案:

答案 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以获取使用链接到每个项目的上下文菜单的命令。