WPF 利用附加属性创建FreezableCollection集合和反射实现控件参数以MVVM模式传递
本文中的例子本质上就是利用附加属性传递附加对象,并在观察者模式中使用反射技术实现指定名称的事件参数传递。
本文中框架任然有很多问题,目前来说是勉强能用,有可以修改的地方尽管说!
我们知道附加属性可以随意在控件上使用。
创建附加属性时写DependencyProperty的这一部分 ,并且需要使用Set__方法和Get__方法,其实不必要全部写出也是可以,甚至都可以不用RegisterAttached方法。
因为xaml其实读取Set__方法和Get__方法,包括依赖属性(其实可以使用只读模式)哦,但是使用dependencyproperty这样注册是可以触发属性值变化的方法,同时也会省去某些麻烦的地方。
所以,我们就可以得到一个只读的附加属性和一个触发源。
不过剩下后续触发的问题就会很严重了,
假如: A类是附加属性,之中只读值为B类型,接受一个触发源,并且B类型中也会有一个C类型,B类型会把反射事件的参数传递到C类中。
如此编写代码,是可以运行,并且是可以触发,不过,C类在XAML是没有办法写绑定的。
所以我们要变换一种方式,
在XAML有一个FreezableCollection集合是可以完美让子元素使用绑定,不过子元素是必须继承Animatable类。
不过我们有了集合,虽然可以直接在集合的某个某个时刻进行设置反射,但是有些浪费,所以编写一个框架? 或者一个观察者模式
截图
更多 直接下载代码吧
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现