【问题标题】:How to get the item I was holding in the listview如何获取我在列表视图中持有的项目
【发布时间】:2013-08-15 10:59:46
【问题描述】:

我正在使用 win8 中的 listview 控件。我想在按住该项目时添加一个事件,然后删除该项目。

xaml 和事件代码如下:

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

似乎我无法从holdingroutdEventArgs 中获取任何信息,但从originalsource 的属性。但它是图像并没有办法访问 iteml

我发现了一个相关问题:“如何在列表视图中获取点击的项目”。可以通过获取selecteditem的属性来解决。

任何人都可以帮助我吗?给我一些线索。

【问题讨论】:

    标签: xaml listview windows-8


    【解决方案1】:

    您应该能够从HoldingRoutedEventArgs.OriginalSource.DataContext 获取它,在您的情况下:(假设ListView.ItemSourceImageModel 的列表)

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

    【讨论】:

    • 这应该是公认的答案,只需确保先将OriginalSource 转换为FrameworkElement
    • IVe 更正了关于 Hendras 注释的答案,以便代码编译。
    【解决方案2】:

    您可以使用SelectedIndex 属性获取项目的索引(但对于这些工作,您必须通过按住项目进行选择)

    int i = imageList.SelectedIndex;
    

    所以要删除项目,您可以使用 RemoveAt() 方法

    imageList.Items.RemoveAt(i);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      • 2018-07-14
      相关资源
      最近更新 更多