【问题标题】:Binding CommandParameter on ItemsControl Tap event在 ItemsControl Tap 事件上绑定 CommandParameter
【发布时间】:2012-06-06 04:26:22
【问题描述】:

我正在使用 ItemsControl,我想确定在 Tap 命令上选择了哪个项目。我的 xaml 在这里定义:

<ItemsControl ItemsSource="{Binding AllMyItems}">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Tap">
              <cmd:EventToCommand Command="{Binding ItemSelectedCommand}" CommandParameter="{Binding}"/>
         </i:EventTrigger>
    </i:Interaction.Triggers>
    .... item template ....

这是我的视图模型:

public RelayCommand<MyItem> ItemSelectedCommand { get; private set; }
public MainViewModel()
    {
        ItemSelectedCommand = new RelayCommand<MyItem>(ItemSelected);
    }

private void ItemSelected(MyItem myItem)
    {
        throw new NotImplementedException();
    }

命令的事件有效,但是当我到达 ItemSelected 方法时,myItem 要么为 Null,要么我得到一个异常转换它(取决于我如何在 xaml 中定义 CommandParameter)。

如果我使用 ListBox 并设置 CommandParameter="{Binding SelectedItem, ElementName=MyItemsList"},我可以做到这一点

关于如何使用 ItemsControl 执行此操作的任何想法?或者性能差异在 Mango 中两者之间没有太大区别?

【问题讨论】:

    标签: windows-phone-7 mvvm-light relaycommand eventtocommand


    【解决方案1】:

    您的 Tap 事件正在 ItemsControl 上发生,您应该将 EventToCommand 放在 ItemTemplate 中,一些 XAML 为您清除这些东西

    <ItemsControl ItemsSource="{Binding AllMyItems}">
    <ItemsControl.ItemTemplate>
    <...>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Tap">
              <cmd:EventToCommand Command="{Binding ItemSelectedCommand}" CommandParameter="{Binding}"/>
         </i:EventTrigger>
    </i:Interaction.Triggers>
    </...>                                    
    </ItemsControl.ItemTemplate>
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-21
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 2011-08-17
      • 2010-12-17
      • 1970-01-01
      相关资源
      最近更新 更多