ItemTemplate 按钮应 select 正确的项目

ItemTemplate button shall select the correct item

我有一个 ListView 和一个自己的 ItemTemplate:

<ListView.ItemTemplate>
  <DataTemplate>
   <StackPanel Orientation="Horizontal">

    <Button Content="Delete Article"
            Click="Button_Click"/>
    <TextBlock Text="{Binding ArticleID}"/>
    <TextBlock Text="{Binding ArticleName}"/>

   </StackPanel>
 </DataTemplate>
</ListView.ItemTemplate>

如果用户单击该按钮,该项目应从列表视图中删除。我的问题是单击按钮不会 select 它行中的项目。

因此,您可以 select 列表视图中的第二个项目并单击第一个项目的 'delete button',第二个项目将从列表视图中删除,而不是我期望的第一个项目。

所以一种方法可能是:每次点击 'delete button' 都会 select 创建按钮的项目,但我不知道如何处理。

也许有更好的方法来解决这个问题...

提前致谢!

您可以选取 DataContext,然后从源中删除该行
需要使用 ObservableCollection 来通知 UI

    private void ButtonDelete_Click(object sender, RoutedEventArgs e)
    {
        Button btn = (Button)sender;
        Fld fld = (Fld)btn.DataContext;
        Folders.Remove(fld);
    }

一种非常简单的方法是将按钮的 Tag 属性 绑定到当前项目

<DataTemplate>
    <StackPanel Orientation="Horizontal">
        <Button Tag="{Binding}"
                Content="Delete Article" Click="Button_Click"/>
        <TextBlock Text="{Binding ArticleID}"/>
        <TextBlock Text="{Binding ArticleName}"/>
    </StackPanel>
</DataTemplate>

然后在点击处理程序中使用它来删除项目:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var article = (Article)((Button)sender).Tag;
    Articles.Remove(article);
}

假设 Articles 是您的文章项 class 的 ObservableCollection。