2012-05-31 10 views
4

ItemsControl을 사용 중이므로 Tap 명령에서 어떤 항목을 선택했는지 알고 싶습니다.ItemsControl의 CommandParameter 바인딩하기

<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 .... 

을 여기에 내보기 모델이다 : 내 XAML은 정의된다

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

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

작품을 명령 할 수있는 이벤트,하지만 난 ItemSelected 방법에 도착하면, myItem는 하나 널, 또는 내가 할 예외를 캐스팅 (CommandParameter를 xaml에 정의하는 방법에 따라 다름). 나는 목록 상자를 사용 CommandParameter="{Binding SelectedItem, ElementName=MyItemsList"}

ItemsControl에 함께이 작업을 수행하는 방법에 대한 아이디어를 설정하면 나는이 작업을 수행 할 수 있습니다

? 아니면 퍼포먼스 차이가 망고에서 둘의 차이를 크게 만들지는 않습니까?

귀하의 탭 이벤트가 ItemsControl에로 발생되는

답변

2

, 당신은 당신

<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> 
... 
의 일을 지우려면 ItemTemplate을, 내부에 약간의 XAML을 당신의 EventToCommand을 배치해야