单击子元素时将事件附加到 listviewItem/Deleting ListviewItem 中的项目

Attaching an Event to an item in a listviewItem/Deleting ListviewItem when clicked on child element

我有一个列表视图,其中包含一个拖放列表视图,每个列表视图项目都包含一个图标(这是一个 MahApps X 图标)和一个文件名。我希望每个 ListviewItem 都有这个 x 图标,当用户单击该图标时,它将从 Listview 或 ObservableCollection 文件名中删除文件名。不幸的是,在这种情况下,我似乎不知道如何处理这个事件,我写的代码都是错误的。我的问题是向我展示如何执行此操作或向我解释在这种情况下事件处理将如何工作以及如何从发件人处获取 ListViewItem。谢谢

这是XAML:

<ListView x:Name="DropList" DockPanel.Dock="Left" Foreground="White"
            Drop="DropList_Drop" 
            DragEnter="DropList_DragEnter" 
            AllowDrop="True" 
            DragOver="DropList_DragOver" >
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Rectangle x:Name="DeleteAttachment" Height="Auto" Width="Height" MouseLeftButtonDown="DeleteAttachment_MouseLeftButtonDown">
                            <Rectangle.Fill>
                                <VisualBrush Visual="{StaticResource appbar_checkmark_cross}" />
                            </Rectangle.Fill>
                        </Rectangle>
                        <TextBlock Text="{Binding Name}" />
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

这是代码:

    ObservableCollection<String> fileNames;

    public Page()
    {
        InitializeComponent();
        DropList.ItemsSource = fileNames;
    }

        private void DeleteAttachment_MouseLeftButtonDown(object sender, MouseButtonEventArgs) {
        fileNames.Remove();
    }

试试这个:

XAML:

<Controls:MetroWindow
                  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                  xmlns:Controls="http://metro.mahapps.com/winfx/xaml/controls"
                  xmlns:local="clr-namespace:MahApps.Metro.Application24" 
                  x:Class="MahApps.Metro.Application24.MainWindow"
                  BorderBrush="{StaticResource AccentColorBrush}"
                  BorderThickness="2"
                  Title="MainWindow"
                  Height="300"
                  Width="300">

<Grid>
    <ListView x:Name="list1" ItemsSource="{Binding Data}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Rectangle Height="15" Width="15" VerticalAlignment="Center" MouseLeftButtonDown="r1_MouseLeftButtonDown">
                        <Rectangle.Fill>
                            <VisualBrush Visual="{StaticResource appbar_checkmark_cross}" />
                        </Rectangle.Fill>
                    </Rectangle>
                    <TextBlock Text="{Binding}" Padding="5,5,5,5" />
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>

主窗口:

public partial class MainWindow : MetroWindow
{
    MyViewModel vm;

    public MainWindow()
    {
        InitializeComponent();

        vm = new MyViewModel();
        DataContext = vm;
    }

    private void r1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        Rectangle r = sender as Rectangle;
        vm.Data.Remove(r.DataContext.ToString());
    }
}

ViewModel:

public class MyViewModel
{
    public ObservableCollection<string> Data { get; set; }

    public MyViewModel()
    {
        Data = new ObservableCollection<string>
        {
            "Item 1",
            "Item 2",
            "Item 3",
            "Item 4",
            "Item 5"
        };
    }
}