ItemTemplate按钮应选择正确的项目

时间:2015-01-01 20:38:54

标签: wpf listview itemtemplate

我有一个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>

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

因此,您可以在列表视图中选择第二项并单击第一项的“删除按钮”,第二项将从列表视图中删除,而不是我期望的第一项。

所以一种方法可能是:每次点击“删除按钮”都会选择创建按钮的项目,但我不知道如何处理。

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

提前致谢!

2 个答案:

答案 0 :(得分:1)

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

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

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

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

假设Articles是文章项目的ObservableCollection。

答案 1 :(得分:0)

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

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