2013-08-15 42 views
6

Tôi đang làm việc với điều khiển listview trong win8. Tôi muốn thêm một sự kiện khi tôi giữ mục đó và xóa mục đó.Cách lấy vật phẩm tôi đang cầm trong listview

XAML và mã sự kiện như thế này:

<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) 
    {...} 

Dường như tôi không thể nhận được bất kỳ thông tin từ holdingroutdEventArgs nhưng thuộc tính của originalsource. Nhưng đó là hình ảnh và không có cách nào truy cập vào iteml

Tôi đã tìm thấy một câu hỏi tương đối: "cách nhận mục được nhấp trong chế độ xem danh sách". nó có thể được giải quyết bằng cách lấy thuộc tính của selecteditem.

ai cũng có thể giúp tôi? cho tôi một số đầu mối.

Trả lời

8

Bạn sẽ có thể để có được nó từ HoldingRoutedEventArgs.OriginalSource.DataContext, trong trường hợp của bạn: (Giả sử rằng các ListView.ItemSource là danh sách các 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

đây phải là câu trả lời được chấp nhận, chỉ cần đảm bảo chuyển đổi 'OriginalSource' thành' FrameworkElement' trước tiên –

+0

IVe đã sửa câu trả lời, liên quan đến nhận xét của Hendras, để mã biên dịch. –

0

Bạn có thể lấy chỉ số của mặt hàng đó bằng cách sử dụng SelectedIndex tài sản (nhưng đối với những việc bạn phải lựa chọn, bằng cách nhấn, và sau khi giữ mục)

int i = imageList.SelectedIndex; 

vì vậy, để xóa các mục mà bạn có thể sử dụng phương pháp RemoveAt()

imageList.Items.RemoveAt(i);