WPF中的ListBox怎么添加删除按钮并删除所在行
直接上代码:
第一步:创建测试类
public class BeautifulGirl
{
public string Name { get; set; }
}
第二步:创建viewmodel和数据源
public class MainWindowVm
{
public ObservableCollection<BeautifulGirl> Girls { get; set; } public MainWindowVm()
{
Girls = new ObservableCollection<BeautifulGirl>
{
new BeautifulGirl
{
Name ="刘亦菲",
},
new BeautifulGirl
{
Name ="高圆圆",
},
new BeautifulGirl
{
Name ="凤姐",
}
};
}
}
第三步:绑定数据和界面显示

<ListBox ItemsSource="{Binding Girls}">
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type local:BeautifulGirl}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
运行起来就会得到下面的结果:

现在你想把里面的凤姐给删了,或者你要是喜欢凤姐,想任意删一个,怎么办
<ListBox ItemsSource="{Binding Girls}">
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type local:BeautifulGirl}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"/>
<Button Content="X" Margin="10,0,0,0" Width="100"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
那就在我们的listbox里面给每一条后面都加一个删除按钮
第四步:写删除逻辑,一般都用command和viewmodel来互动,所以我们先创建一个command
public class CommandBase : ICommand
{
public event EventHandler CanExecuteChanged; public Action<object> AcExecute { get; set; } public Func<object, bool> FcCanExecute { get; set; } public CommandBase(Action<object> execute, Func<object, bool> canExecute)
{
this.AcExecute = execute;
this.FcCanExecute = canExecute;
}
public CommandBase(Action<object> execute)
{
this.AcExecute = execute;
this.FcCanExecute = (o) =>
{
return true;
};
}
public bool CanExecute(object parameter)
{
if (FcCanExecute != null)
{
return FcCanExecute(parameter);
}
return false;
}
public void Execute(object parameter)
{
AcExecute(parameter);
}
}
怎么使用这个command
public class MainWindowVm
{
public ObservableCollection<BeautifulGirl> Girls { get; set; } public CommandBase DelCommand { get; set; } public MainWindowVm()
{
Girls = new ObservableCollection<BeautifulGirl>
{
new BeautifulGirl
{
Name ="刘亦菲",
},
new BeautifulGirl
{
Name ="高圆圆",
},
new BeautifulGirl
{
Name ="凤姐",
}
}; DelCommand = new CommandBase(DelAction);
} private void DelAction(object parameter)
{
var girl = parameter as BeautifulGirl;
if (girl != null)
{
Girls.Remove(girl);
}
}
}
在viewmodel里面创建一个command,和command对应的方法
前端绑定一下
<ListBox ItemsSource="{Binding Girls}">
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type local:BeautifulGirl}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"/>
<Button Content="X" Margin="10,0,0,0" Width="100"
Command="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=DataContext.DelCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self}, Path=DataContext}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
注意看里面的红色部分代码
最后运行一下

删除多余的两个,只留下喜欢的
(本博客只是玩梗,没有人身攻击的意思)
项目github地址:bearhanQ/WPFFramework: Share some experience (github.com)
QQ技术交流群:332035933;
WPF中的ListBox怎么添加删除按钮并删除所在行的更多相关文章
- WPF中的ListBox实现按块显示元素的方法
本文实例讲述了WPF中的ListBox实现按块显示元素的方法.分享给大家供大家参考,具体如下: 注意:需要设置ListBox的属性 ScrollViewer.HorizontalScrollBarVi ...
- WPF中修改ListBox项的样式病修改选中项的背景颜色
最终效果: 1 <ListBox Name="cmb"> 2 <!--修改颜色--> 3 <ListBox.Resources> 4 <! ...
- WPF绑定的ListBox获取ListBoxItem及GoToState应用
现公司项目中需要制作一个扇形菜单,菜单项是用ListBox重写Style实现的,其数据是绑定的.菜单的每一项都有Normal,MouseOver和Selected三种状态,这三种状态当然可以通过鼠标移 ...
- WPF 显示文件列表中使用 ListBox 变到ListView 最后使用DataGrid
WPF 显示文件列表中使用 ListBox 变到ListView 最后使用DataGrid 故事背景: 需要检索某目录下文件,并列出来,提供选择和其他功能. 第一版需求: 列出文件供选择即可,代码如下 ...
- WPF中ListBox的项ListBoxItem被选中的时候Background变化
使用WPF 中ListBox,点击ListBoxItem的时候,自定义它的背景色,曾经在网上找了一些方法, 不是很理想,后来在StackOverflow上找到了,贴出代码和效果图: 效果图:
- WPF中ListBox /ListView如何改变选中条背景颜色
适用ListBox /ListView WPF中LISTVIEW如何改变选中条背景颜色 https://www.cnblogs.com/sjqq/p/7828119.html
- WPF中ListBox的绑定
WPF中列表式控件派生自ItemsControl类,继承了ItemsSource属性.ItemsSource属性可以接收一个IEnumerable接口派生类的实例作为自己的值(所有可被迭代遍历的集合都 ...
- 转:WPF中ListBox的创建和多种绑定用法
先从最容易的开始演示ListBox控件的创建. Adding ListBox Items下面的代码是向ListBox控件中添加多项ListBoxItem集合.XAML代码如下:<ListBox ...
- WPF中ListBox滚动时的缓动效果
原文:WPF中ListBox滚动时的缓动效果 上周工作中遇到的问题: 常规的ListBox在滚动时总是一格格的移动,感觉上很生硬. 所以想要实现类似Flash中的那种缓动的效果,使ListBox滚动时 ...
- MVVM模式和在WPF中的实现(二)数据绑定
MVVM模式解析和在WPF中的实现(二) 数据绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
随机推荐
- 安装jieba中文分词库
插入一条: 有个更快安装下载jieba的方法,用镜像下载,非常快,2秒就行 pip install jieba -i https://pypi.douban.com/simple/ 1.打开官方网站: ...
- idea使用git管理项目(Mac版)
1.本地安装git mac版 breaw install git 查看是否安装成功 git --version 这样就成功了,一般是自带的有 windows版 https://www.cnblogs. ...
- 手把手教你集成GraphRag.Net:打造智能图谱搜索系统
在人工智能和大数据发展的背景下,我们常常需要在项目中实现知识图谱的应用,以便快速.准确地检索和使用信息. 今天,我将向大家详细介绍如何在一个新的.NET项目中集成GraphRag.Net,这是一个参考 ...
- [rCore学习笔记 019]在main中测试本章实现
写在前面 本随笔是非常菜的菜鸡写的.如有问题请及时提出. 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil (目前啥也没有 批处理 ...
- BI 工具助力企业解锁数字化工厂,开启工业智能新视界
背景 在 2022 年公布的<"十四五"数字经济发展规划>中,政府不断增加对制造业数字化转型的政策支持力度,积极倡导制造企业采用最新技术,提升自动化.数字化和智能化水平 ...
- 【GeoScene】一、创建、发布路网服务,并在代码中测试最短路径分析
前言 网上关于GeoScene及GeoScene API for JavaScript的资料太少了,官方的技术支持又太慢了,最近把在项目中踩过的坑分享出来: **版本信息** GeoScene Pro ...
- 【RabbitMQ】14 集群搭建
多服务器单实例 -- 参考博客: https://www.cnblogs.com/lixioayi/articles/9993658.html 首先要找到cookie文件,所有实例要保持cookie一 ...
- 【Java-GUI】12 Swing07 JList
列表和下拉选择: package cn.dzz; import javax.swing.*; import javax.swing.border.EtchedBorder; import javax. ...
- ViT:拉开Trasnformer在图像领域正式挑战CNN的序幕 | ICLR 2021 —— An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
论文地址: https://arxiv.org/abs/2010.11929 Github地址: https://github.com/google-research/vision_transform ...
- 【转载】 python进程绑定CPU
版权声明:本文为CSDN博主「人间再无张居正」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/u01388765 ...