我有一个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>
如果用户点击该按钮,则该项目应从列表视图中删除。我的问题是点击按钮不会选择它的行中的项目。
因此,您可以在列表视图中选择第二项并单击第一项的“删除按钮”,第二项将从列表视图中删除,而不是我期望的第一项。
所以一种方法可能是:每次点击“删除按钮”都会选择创建按钮的项目,但我不知道如何处理。
也许有更好的方法来解决这个问题......
提前致谢!
答案 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);
}