- 博客(17)
- 收藏
- 关注
原创 WPF数据绑定(转换器,验证规则[3])
本文介绍了WPF中的两种数据转换器(IValueConverter和IMultiValueConverter)以及数据验证器(ValidationRule)的用法。转换器用于将源数据转换为目标控件需要的格式:IValueConverter处理单值转换,示例中根据ID值改变行背景色;IMultiValueConverter处理多值转换,示例中同时判断ID和Name来设置字体颜色。验证器用于数据校验,示例展示了Name长度验证。文章通过XAML和C#代码演示了转换器和验证器的实现方式,并附有实际效果图。这些技术
2025-09-04 17:31:46
175
原创 WPF数据绑定(INotifyPropertyChanged,ObservableCollection[2])
摘要:文章介绍了WPF中INotifyPropertyChanged接口的实现方法,通过创建ObservableObject基类继承该接口,使ViewModel和Model类继承后可实现属性变更通知。示例展示了Person类属性变更时前端UI自动更新的效果。同时介绍了ObservableCollection泛型集合的使用,该集合在元素增减时会自动通知UI更新。核心要点包括:1) 实现INotifyPropertyChanged接口的基类写法;2) 属性变更时调用RaisePropertyChanged方法;
2025-09-04 11:01:35
236
原创 WPF数据绑定(binding[1])
本文介绍了WPF中数据绑定的常见方式,包括:1)绑定ViewModel属性;2)绑定控件属性;3)绑定数据源对象;4)RelativeSource相对绑定。通过代码示例展示了如何在XAML中实现这些绑定,包括使用ElementName绑定控件属性、StaticResource绑定静态资源、以及RelativeSource的四种模式(Self、FindAncestor、PreviousData、TemplatedParent)。文章还提供了后端C#代码和运行效果图,帮助理解数据绑定的实际应用场景。
2025-09-03 16:52:42
414
原创 WPF布局
WPF常用布局控件摘要: WPF提供多种布局控件:Grid(网格布局,支持行列定义、跨行列)、StackPanel(线性排列)、WrapPanel(自动换行)、DockPanel(停靠布局)、UniformGrid(均等单元格)、Canvas(绝对定位)和Border(装饰边框)。Grid最灵活,支持行高列宽按像素(Width="100")、自动(Auto)或比例(*/N*)分配。示例展示了Grid的嵌套、边框绘制及跨行列布局,通过RowDefinitions和ColumnDefinit
2025-09-02 14:23:51
745
原创 [4]WebAPI创建(多级缓存)
摘要 本文介绍了多级缓存的实现方法,结合本地内存缓存和Redis缓存来避免缓存穿透、击穿和雪崩问题。通过C#代码示例展示了GET和POST请求的处理逻辑:GET请求依次检查本地缓存、Redis缓存,最后查询数据库;POST请求则同时更新本地和Redis缓存。关键点包括设置不同过期时间(本地30秒,Redis60秒)和使用Json序列化存储数据。这种方法既提高了系统响应速度,又减轻了数据库压力。
2025-09-01 14:23:28
147
原创 [3]WebAPI创建(Redis缓存)
由于MemoryCache只使用于本地当实例缓存,因此如果API接口部署多个实例,可能会导致MemoryCahe无法被命中,因此引入Redis作为中间件,提供缓存。
2025-08-29 10:37:35
228
原创 [2]WebAPI创建(单实例 本地缓存Memorycache)
摘要:本文介绍了如何在WebAPI中添加本地缓存功能,通过Microsoft.Extensions.Caching.Memory实现。主要步骤包括:1)引入NuGet包并配置依赖注入;2)在Controller中实现带过期时间的缓存读取逻辑;3)处理增删改操作时同步更新缓存。本地缓存可提升查询速度并减轻数据库压力,但存在多实例无法共享的局限性,建议集群环境下使用Redis作为缓存中间件。文中详细展示了GET和POST方法的缓存实现代码,并强调了对缓存一致性的处理。
2025-08-27 15:19:25
106
原创 [1]WebAPI创建(连接数据库,Code First,EF)
本文介绍了如何使用.NET 8 Core创建基础WebAPI。主要内容包括:1)创建项目和Product模型类;2)添加EF Core相关依赖;3)配置ProductContext数据库上下文;4)通过Code First生成数据库表;5)创建ProductController控制器并实现CRUD接口。文中详细说明了使用Pomelo.EntityFrameworkCore.MySql连接MySQL数据库的步骤,以及通过EF Core迁移命令生成数据库表的过程。最后展示了自定义ResponseModel和实现
2025-08-25 17:19:58
342
原创 C#常用锁
锁类型核心特性优点缺点适用场景Monitorlock基于对象的排他锁,同一时间仅1个线程访问1. 轻量级,单进程内性能最优2.lock关键字简化语法,无需手动释放3. 支持WaitPulse线程协作1. 仅支持单进程内同步,无法跨进程2. 读写无区分,读操作也独占锁,并发效率低1. 单进程内简单同步(如多线程修改共享变量)2. 读写频率相近或写操作频繁场景3. 线程间协作(基础生产者-消费者模式)读写分离,读线程并发、写线程独占1. 读操作并发性能优异,“多读少写”场景效率高。
2025-08-21 14:10:48
470
原创 AutoFac 从0到1 --- [2]
紧接上一篇:像这种通过构造函数依赖注入的,如果使用上一篇文章中的Activator.CreateInstance,会报错,因为没有传参,因此需要改写,这里重新定义一个新容器类ContainerBuilder_Constructor。
2025-08-15 10:54:21
240
原创 AutoFac从 0 到 1 实现
创建几个Model用于测试:这里创建了两个类,一个Student,一个Teacher,Student里面有teacher的依赖。
2025-08-14 13:56:02
394
原创 数据库查询大数据量时有什么解法
(注意:索引过多会导致插入资料时速率较低,过多的索引也会占用数据库的空间)这个需要看当前项目是否支持,本人公司不太建议,因为考虑到出问题不好追溯。
2025-08-11 15:51:11
202
原创 Oracle 查询超出1K报错解决
Oracle查询时in查询时最多只能1000个,超过会报错,所以写个公用方法,拼接成。**这里datatable可以转换为其他集合,根据具体的实现**col in() or col in()即可解决此问题。
2025-08-08 16:57:54
150
转载 linq select 和selectMany的区别
详细看:你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:撤销:Ctrl/Command + Z重做:Ctrl/Command + Y加粗:Ctrl/Command + B斜体:Ctrl/Command + I标题:Ctrl/Command
2025-05-19 10:22:41
21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人