2013-08-15 7 views
6

Sto lavorando con controllo listview in win8. Voglio aggiungere un evento quando tengo l'oggetto ed elimina l'elemento.Come ottenere l'oggetto che stavo tenendo nella listview

il codice XAML e codice evento come questo:

<ListView x:Name="ImageList" VerticalAlignment="Bottom" Background="LightGray" Width="1050" BorderBrush="Black" BorderThickness="2" Grid.Column="1" 
         Holding="ListView_Hold1" SelectionChanged="OnSelectedChanged" SelectionMode="Single" Height="152" ScrollViewer.HorizontalScrollBarVisibility="Auto" ItemContainerStyle="{StaticResource ListViewItemStyle1}" Style="{StaticResource ListViewStyle1}"> 
       <ListView.ItemTemplate> 
        <DataTemplate> 
          <Image Opacity="0.7" Width="150" Height="125" Stretch="UniformToFill" Source="{Binding}" /> 
        </DataTemplate> 
       </ListView.ItemTemplate> 
       <ListView.ItemsPanel> 
        <ItemsPanelTemplate> 
         <VirtualizingStackPanel Orientation="Horizontal"/> 
        </ItemsPanelTemplate> 
       </ListView.ItemsPanel> 
      </ListView> 


private async void ListView_Hold1(object sender, Windows.UI.Xaml.Input.HoldingRoutedEventArgs e) 
    {...} 

Sembra che non posso ottenere qualsiasi informazione da holdingroutdEventArgs ma l'attributo di originalsource. Ma è l'immagine e non c'è modo di accedere a iteml

Ho trovato una domanda relativa: "come ottenere l'elemento cliccato in listview". può essere risolto ottenendo l'attributo di selecteditem.

chiunque può aiutarmi? dammi qualche idea.

risposta

8

Si dovrebbe essere in grado di ottenere dal HoldingRoutedEventArgs.OriginalSource.DataContext, nel tuo caso: (assumendo che il ListView.ItemSource è una lista di ImageModel)

private async void ListView_Hold1(object sender, Windows.UI.Xaml.Input.HoldingRoutedEventArgs args) 
{ 
    var source = (FrameworkElement)args.OriginalSource; 
    var imageModel = (ImageModel)source.DataContext; 
} 
+1

questa dovrebbe essere la risposta accettata, assicuratevi solo di convertire 'OriginalSource' in' FrameworkElement' prima –

+0

IVe ha corretto la risposta, per quanto riguarda il commento di Hendras, in modo che il codice compili. –

0

È possibile ottenere l'indice dell'elemento utilizzando la proprietà SelectedIndex (ma per questi lavori è necessario selezionare, premendo il tasto, e dopo tenere premuto l'elemento)

int i = imageList.SelectedIndex; 

Quindi, per eliminare la voce è possibile utilizzare il metodo RemoveAt()