2012-05-31 4 views
4

Я использую ItemControl, и я хочу определить, какой элемент был выбран в команде Tap. Мой XAML определяется здесь:Binding CommandParameter on ItemsControl Tap event

<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, либо я получаю исключение, отбрасывающее его (в зависимости от того, как я определяю CommandParameter в xaml).

Я могу это сделать, если я использую ListBox и установить CommandParameter="{Binding SelectedItem, ElementName=MyItemsList"}

Любые идеи о том, как сделать это с помощью ItemsControl? Или разница в перфомансе не сильно отличается от двух в Манго?

ответ

2

Ваш 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> 
...