【问题标题】:Mvvm Light ListBox MouseButtonLeftDown and EventToCommand - how to pass clicked itemMvvm Light ListBox MouseButtonLeftDown 和 EventToCommand - 如何传递点击的项目
【发布时间】:2010-11-06 20:38:38
【问题描述】:

我在我的 MVVM Light Windows Phone 7 应用程序中绑定了一个 ListBox,并且想要在用户单击我的 ListBox 中的项目时在我的视图模型中调用一个命令。

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

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

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

现在我正准备在代码隐藏中设置事件处理程序,并从那里调用 ViewModel,使用“发送者”获取数据项。

谢谢,

Damian

【问题讨论】:

    标签: windows-phone-7 mvvm-light


    【解决方案1】:

    看起来这个问题实际上没有意义 - 在 ListBox 上触发的 MouseLeftButtonDown 事件与 ListBox 中的特定项目没有关联。

    相反,我希望在与 ListBox 关联的 ItemTemplate 上连接到此事件。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2011-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-26
        • 2013-02-25
        相关资源
        最近更新 更多