2012-02-15 5 views
1

У меня есть ListBox в приложении WP7, где я хочу что-то сделать с элементом, когда пользователь его удерживает. Событие отлично. Мой метод удержания вызова вызван, но я не могу определить, какой элемент в списке удерживался. ListBox.SelectedItem всегда -1 и код из другого поста на StackOverflow doens't работы:Получить выбранный элемент из ListBox удержания

FrameWorkelement element = (FrameworkElement) e.OriginalSource; 
ItemViewModel item = (ItemViewModel) element.DataContext; 

я получаю InvalidCastException при его запуске во второй строке.

ответ

5

Следующий код должен работать.

private void StackPanel_Hold(object sender, GestureEventArgs e) 
{ 
    ItemViewModel itemViewModel = (sender as StackPanel).DataContext as ItemViewModel; 
    string t = itemViewModel.LineOne; 
} 

Примечание: перед использованием DataContext объекта отправителя, убедитесь, что вы приводите объект отправителя к нужному классу. В этом примере я использую StackPanel в моей DataTemplate:

<ListBox x:Name="MainListBox" Margin="0,0,-12,0" ItemsSource="{Binding Items}" > 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Margin="0,0,0,17" Height="78" Hold="StackPanel_Hold"> 
       <TextBlock Text="{Binding LineOne}" /> 
       <TextBlock Text="{Binding LineTwo}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
Смежные вопросы