【wpf】关于绑定的一点明悟
背景简介
软件功能为,读取一个文件夹下的所有子文件夹,每个文件夹对自动对应生成 一组 “按键+四个勾选”

按键点击触发,可以发送与其对应文件夹中的一些内容。这个绑定的过程我在之前的文章有过详细的介绍,非常的简单。
这里回顾一下,贴一段代码:
<Grid><Grid.RowDefinitions><RowDefinition Height="auto"/><RowDefinition/></Grid.RowDefinitions><DockPanel><Label DockPanel.Dock="Right" Content="{Binding BtnName}"/><Button DockPanel.Dock="Right" Command="{Binding NextCmd}">下一个</Button><Button DockPanel.Dock="Right" Command="{Binding FliesReloadCmd}">文件重载</Button><hc:TextBox Text="{Binding saveInfo.BaseDirectoryPath}"hc:TitleElement.Title="路径:" hc:TitleElement.TitlePlacement="Left"hc:TitleElement.HorizontalAlignment="Center"hc:TitleElement.TitleWidth="50"/></DockPanel><ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Visible" ><ItemsControl ItemsSource="{Binding ButtonList}"><ItemsControl.ItemsPanel><ItemsPanelTemplate><UniformGrid Columns="4"/></ItemsPanelTemplate></ItemsControl.ItemsPanel><ItemsControl.ItemTemplate><DataTemplate><Grid Margin="5"><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><Button Content="{Binding Name}" Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.TestCmd}"CommandParameter="{Binding Path=Content, RelativeSource={RelativeSource Mode=TemplatedParent}}"/><StackPanel Grid.Column="1" VerticalAlignment="Center"><CheckBox IsChecked="{Binding Bottom}"/><CheckBox IsChecked="{Binding Middle}"/><UniformGrid Columns="2"><CheckBox IsChecked="{Binding Head}"/><CheckBox IsChecked="{Binding Ptb}"/></UniformGrid></StackPanel></Grid></DataTemplate></ItemsControl.ItemTemplate></ItemsControl></ScrollViewer></Grid>
明悟
现在,我需要一个新的功能,因为一个个的按照顺序点按钮实在是太低效了。我增加了一个下一个 按钮。 我的目的是,通过下一个按钮来代替,“一个个的按照顺序点按钮” 这个操作!
迷雾
现在换成你,你能给出一个思路吗? 我马上就有了思路: 那,只要我在
下一个
按钮对应的事件中,获取到所有对象的实例,然后再触发按键按下不久行了?
于是我立刻查看了后台代码!
public ObservableCollection<BtnItem> ButtonList { get; set; } = new ObservableCollection<BtnItem>();
由于我们使用的是绑定,使用后台的数组,其实是按键对应的数据,而不是按键本身。
要想得到按键的实例,似乎没有很直接的方式。结果我就在,如何通过数据源获取界面对象实例
这个问题上陷入沉思!
明悟
突然,一个念头突然打破了循环,既然是绑定,为啥我还需要界面的那些按键对象?是因为要那一个个触发按键吗?但是触发按键是表现,实际的目的是实现:按键触发,可以发送与其对应文件夹中的一些内容
于是,注意力就从按键的点击,到了功能的实现!现在回到最初的诉求!
增加了一个
下一个按钮。 我的目的是,通过下一个按钮来代替,“一个个的按照顺序点按钮” 这个操作!
再之前的代码里,我已经实现了最初的功能(按键触发,可以发送与其对应文件夹中的一些内容),现在只是增加了一个下一个 按钮来代替。
之前的代码:
void Test(BtnItem btnItem)
{try{//发送功能,省略}catch (Exception ex){MessageBox.Show(ex.Message);}
}
BtnItem 就是按键绑定数组的子项。也只是个数据。Test通过接收这个数据,得知是哪个按键按下。
所以下一个按键对应的事件,直接调用Test,并传入对应的BtnItem就好了!这样就是和界面点击按键一样了!
//下一张
NextCmd = new DelegateCommand(() =>
{ //MessageBox.Show(ButtonList[btnIndex].Name);if (btnIndex < ButtonList.Count - 1){Test(ButtonList[btnIndex]);btnIndex++;}else{MessageBox.Show("完毕了!"); }
});
所以,这里是需要利用ButtonList,并记录下btnIndex。就能实现轮询按按钮的功能。
小结
轮询按按钮这个动作,让我的思维产生的偏差,让我一直想如何获取界面的按键对象!
但是,我们完成的绑定之后,就一定要注意通过数据驱动界面,或者直接用数据解决问题,不要马上去想着获取界面对象。
相关文章:
【wpf】关于绑定的一点明悟
背景简介 软件功能为,读取一个文件夹下的所有子文件夹,每个文件夹对自动对应生成 一组 “按键四个勾选” 按键点击触发,可以发送与其对应文件夹中的一些内容。这个绑定的过程我在之前的文章有过详细的介绍,非常的简单。 这里回顾…...
叠罗汉游戏
题目描述 农场的N头奶牛喜欢玩叠罗汉游戏,就是几头奶牛1头奶牛接着1头奶牛的站成一柱子形状。不过奶牛的力量不一样,用数值Ci表示第i头奶牛它的上面最多可以站多少头奶牛,问这些奶牛最少可以站成几个柱子形状。 输入格式 输入文件名&#…...
太阳能风吸式杀虫灯是什么
TH-FD1随着农业科技的不断进步,太阳能风吸式杀虫灯作为一种新兴的绿色农业技术,正逐渐走进人们的视野。这种集太阳能和风吸技术于一体的杀虫设备,不仅具有环保节能的特点,还能有效减少农药使用,提高农产品质量…...
SpringBoot启动扩展应用:干预优化+加快启动时间
一、SpringBoot启动配置原理简述 本内容直接查看分析SpringBoot启动配置原理,传送门: 二、SpringBoot启动过程干预 Spring Boot启动过程中我们可以实现以下干预工作: 修改Spring Boot默认的配置属性。使用ConfigurationProperties和Enable…...
探索Linux世界:初次接触和基本指令(文件操作)
文章目录 1.基本介绍和准备2.基本指令和Linux的基本操作3.几个重要基本指令3.1 ls - 列出文件和目录3.1.1文件的知识3.1.2 .和..文件 3.2pwd - 显示当前工作目录3.2.1路径知识 3.3 cd - 切换目录3.4 touch - 创建文件或更新时间戳3.5mkdir - 创建新目录3.6rm - 删除文件或目录3…...
递归函数(c++题解)
题目描述 对于一个递归函数w(a, b, c)。 如果a < 0 or b < 0 or c < 0就返回值1。 如果a > 20 or b > 20 or c > 20就返回W(20,20,20)。 如果a < b并且b < c 就返回w(a, b, c − 1) w(a, b − 1, c − 1) − w(a, b − 1, c), 其它别…...
Qt将Unicode转换成UTF8中文
解析字符串,并将里面的Unicode转换成中文 QString unicodeToUtf8(QString unicode) {QString result;for (int i 0; i < unicode.length(); i){QString flag unicode.mid(i,2); if (flag "\\u"){QString s1 unicode.mid(i 2, 4);result.append(s…...
HTTP 的 multipart 类型
上一篇文章讲到 http 的 MIME 类型 http MIME 类型 里有一个 multipart 多部分对象集合类型,这个类型 http 指南里有讲到:MIME 中的 multipart(多部分)电子邮件报文中包含多个报文,它们合在一起作为单一的复杂报文发送…...
【NR 定位】3GPP NR Positioning 5G定位标准解读(二)
目录 前言 2. UE定位方法的作用 3. 标准UE定位方法 3.1 引言 3.2 网络辅助的GNSS方法 3.3 OTDOA定位 3.4 增强小区ID方法 3.5 气压传感器定位 3.6 WLAN定位 3.7 蓝牙定位 3.8 TBS定位 3.9 运动传感器定位 3.10 NR增强小区ID方法 3.11 多RTT定位 3.12 DL-AoD定位…...
为何代理IP的稳定性不如有线IP?
代理IP与网线IP的稳定性之间存在差异的原因在于它们的工作机制和服务环境的不同。以下是代理IP不如网线IP稳定的一些主要原因: 1. 服务提供商的质量: - 动态分配:代理IP通常是动态分配的,这意味着每次请求或每隔一段时间ÿ…...
【c++】 string类的模拟实现
1.浅拷贝 浅拷贝:也称位拷贝,编译器只是将对象中的值拷贝过来。如果对象中管理资源,最后就会导致多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该资源已经被释放,以…...
transformer--transformer模型构建和测试
前面几节进行了各种组件的学习和编码,本节将组件组成transformer,并对其进行测试 EncoderDecoder 编码器解码器构建 使用EnconderDecoder实现编码器-解码器结构 # 使用EncoderDeconder类实现编码器和解码器class EncoderDecoder(nn.Module):def __ini…...
从0到1全流程使用 segment-anything
从0到1全流程使用 segment-anything 一、安装 anaconda 一、下载 anaconda 二、以管理员身份运行安装 1、勾选 Just Me 2、统一安装路径(后续 python 等包也安装至此目录) 3、勾选 add to path 然后安装即可。 三、修改 Anaconda 默认路径及默认缓存路径 Anaconda 默认下…...
Window系统部署Splunk Enterprise并结合内网穿透实现远程访问本地服务
文章目录 前言1. 搭建Splunk Enterprise2. windows 安装 cpolar3. 创建Splunk Enterprise公网访问地址4. 远程访问Splunk Enterprise服务5. 固定远程地址 前言 本文主要介绍如何简单几步,结合cpolar内网穿透工具实现随时随地在任意浏览器,远程访问在本地…...
Windows服务器:通过nginx反向代理配置HTTPS、安装SSL证书
先看下效果: 原来的是 http,配置好后 https 也能用了,并且显示为安全链接。 首先需要 SSL证书 。 SSL 证书是跟域名绑定的,还有有效期。 windows 下双击可以查看相关信息。 下载的证书是分 Apache、IIS、Tomcat 和 Nginx 的。 我…...
LeetCode67 二进制求和
题目 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 示例 示例 1:输入:a "11", b "1" 输出:"100" 示例 2:输入:a "1010", b "1011" 输出&…...
python | 列表,元组,字符串,集合,字典
列表: 可以容纳任意数目不同类型的元素(支持我们学过的任意数据类型)元素之间有先后顺序用中括号包裹,每个元素用逗号隔开 例如: students [林黛玉,薛宝钗,贾元春,贾探春,史湘云,妙玉,贾迎春,贾惜春,王熙凤,贾巧姐…...
稀疏图带负边的全源最短路Johnson算法
BellmanFord算法 Johnson算法解决的问题 带负权的稀疏图的全源最短路 算法流程 重新设置的每条边的权重都大于或等于0,跑完Djikstra后得到的全源最短路,记得要还原,即:f(u,v) d(u,v) - h[u] h[v] 例题...
oracle基础体系
一、 Oracle数据库服务器 数据库在各个行业都会有使用到;其实,我们平时无论是在与客户沟通或者交流中,所说的Oracle数据库是指Oracle数据库服务器(Oracle Server),它由Oracle实例(Oracle Instan…...
k8s运维问题整理
1.宕机或异常重启导致etcd启动失败 服务器非正常关机(意外掉电、强制拔电)后 etcd 数据损坏。 查看apiserver日志发现出现报错Error while dialing dial tcp 127.0.0.1:2379: connect: connection refused,2379是etcd的端口,那么a…...
科研助手实战:OpenClaw调用Qwen3-32B实现论文摘要与归类
科研助手实战:OpenClaw调用Qwen3-32B实现论文摘要与归类 1. 为什么需要自动化文献管理 作为一名经常需要阅读大量文献的研究者,我长期被两个问题困扰:一是下载的PDF论文堆积如山却难以快速定位关键内容;二是手动整理文献耗时耗力…...
CSS如何避免浮动元素换行_计算所有浮动元素的总宽度不超过父容器宽度
浮动元素换行是因子元素总宽度(含padding、border、margin)超过父容器可用宽度,导致最后一个被挤至下一行;这是float原始行为,非bug,需用box-sizing:border-box、flex布局等规避。浮动元素换行是因为父容器…...
AMx8x5系列RTC驱动详解:嵌入式低功耗实时时钟集成方案
1. AMx8x5系列RTC驱动深度解析:面向嵌入式系统的高精度实时时钟集成方案AMx8x5并非单一芯片型号,而是一类高度兼容、引脚与寄存器级对齐的超低功耗实时时钟(RTC)器件家族的统称。该命名规则覆盖了Ambiq Micro(原Ambiq …...
Claude Code 编程哲学正在改变一切:从“理解代码”到“跑通代码”
目录为什么传统 Coding Agent 开始失效向量化代码理解的瓶颈在哪里Claude Code 为什么选择“终端调试范式”CodeGraph:节省 Token,但解决不了核心问题真正的转变:从“看懂代码”到“跑通代码”这套范式对工程实践意味着什么一、为什么传统 Co…...
linux——退出单一线程
pthread_exitexit(0)函数原型: void pthread‐exit(void *retval); retval指针:必须指向全局,堆 #include<stdio.h> #include<pthread.h> #include<unistd.h> #include<string.h> #include<stdlib.h&…...
嵌入式文件传输协议:Xmodem/Ymodem原理与应用实践
1. 嵌入式文件传输协议概述在工业控制、航天探测、物联网设备等嵌入式应用场景中,文件传输是最基础也最关键的通信需求之一。从简单的单片机固件升级,到复杂的卫星图像回传,都需要稳定可靠的文件传输机制作为支撑。作为一名嵌入式开发工程师&…...
002、环境搭建:Python虚拟环境、LangChain安装与核心依赖解析
002、环境搭建:Python虚拟环境、LangChain安装与核心依赖解析从一次深夜调试说起 上周三凌晨两点,我被一个诡异的错误钉在屏幕前:明明本地测试通过的LangChain智能体,在同事的机器上死活跑不起来。报错信息指向一个版本冲突——py…...
[具身智能-234]:OpenCV - 图像通常是三维的(高 H × 宽 W × 通道 C,例如 RGB 三通道),而 Mask 通常是二维的(高 H × 宽 W,单通道黑白),为什么?
图像通常是三维的(高 H 宽 W 通道 C,例如 RGB 三通道),而 Mask 通常是二维的(高 H 宽 W,单通道黑白)。它们之间的“映射”并不是数学上的维度变换,而是一种基于广播机制的逻辑索引…...
终极指南:如何5分钟免费安装Fooocus AI图像生成软件
终极指南:如何5分钟免费安装Fooocus AI图像生成软件 【免费下载链接】Fooocus Focus on prompting and generating 项目地址: https://gitcode.com/GitHub_Trending/fo/Fooocus Fooocus是一款专注于提示词和图像生成的AI图像生成软件,它重新定义了…...
避坑指南:Ecology9流程创建失败的7个常见错误及解决方案(附调试技巧)
Ecology9流程创建失败的7个典型陷阱与深度解决方案 1. 权限配置:被忽视的系统级限制 权限问题往往是流程创建失败的首要原因。许多实施顾问只关注表面错误提示,却忽略了系统底层的权限体系设计。Ecology9的权限控制分为三个层级: 组织架构权限…...
