【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。就能实现轮询按按钮的功能。

小结

轮询按按钮这个动作,让我的思维产生的偏差,让我一直想如何获取界面的按键对象!
但是,我们完成的绑定之后,就一定要注意通过数据驱动界面,能够直接用数据解决的问题,就不要去想着获取界面对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/711741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3月1日做题总结(静态库与动态库)

前言 最近学到了静态库和动态库的相关知识&#xff0c;就顺便整理了一下相关题目。如果对静态库和动态库知识不熟悉的同学&#xff0c;推荐看这篇文章——《静态库与动态库》&#xff0c;讲的很详细。 第一题 关于静态库与动态库的区别&#xff0c;以下说法错误的是&#xff…

mac jupyter使用现有的python环境

mood&#xff1a;python 编程真的是在反复的与自己和解啊 本来超级的畏难情绪 读会儿书 计算机博士的书 感觉还是要坚强的。《研磨记》--一位博士生的回忆录 作者技术真的强啊 正文开始&#xff1a; 聚焦搜索&#xff0c;打开终端激活虚拟环境&#xff1a;conda activate pyt…

力扣爆刷第83天之hot100五连刷1-5

力扣爆刷第83天之hot100五连刷1-5 文章目录 力扣爆刷第83天之hot100五连刷1-5一、1. 两数之和二、49. 字母异位词分组三、128. 最长连续序列四、283. 移动零五、11. 盛最多水的容器 一、1. 两数之和 题目链接&#xff1a;https://leetcode.cn/problems/two-sum/description/?…

javascript中使用‘use strict’和不使用的区别

错误处理&#xff1a; 严格模式使得 JavaScript 对某些可能的问题抛出错误&#xff0c;而在非严格模式下&#xff0c;这些问题可能会被忽略。例如&#xff0c;未声明的变量&#xff08;即全局变量&#xff09;在非严格模式下会被隐式地创建为全局变量&#xff0c;而在严格模式…

十一、 二进制位运算

描述 Python有位运算&#xff0c;是直接将数字看成二进制&#xff0c;直接对二进制数字的每一位进行运算。现输入两个十进制整数x、y&#xff0c;请计算它们的位与、位或&#xff0c;输出按照十进制的形式。 输入描述&#xff1a; 一行输入两个整数x、y&#xff0c;以空格间…

git:合并两个不同仓库的代码

有两个代码仓库&#xff1a;代码仓库A、代码仓库B&#xff0c;其中一个仓库的代码是为了新项目拉取的新分支&#xff0c;所以分支的部分修改历史是相同的 现在要将代码仓库B 的代码合并到代码仓库A 实现思路&#xff1a;分支合并 实现步骤&#xff1a; # 1、clone代码仓库A…

外汇天眼:ASIC 获得针对前 Blockchain Global 董事的临时出行限制令

澳大利亚证券与投资委员会&#xff08;ASIC&#xff09;已经针对前Blockchain Global Limited&#xff08;清算中&#xff09;董事梁国&#xff08;又名Allan Guo&#xff09;获得了临时旅行限制令。这些命令在其他方面&#xff0c;阻止郭先生在2024年8月20日或进一步命令之前离…

(done) 如何计算 Hessian Matrix 海森矩阵 海塞矩阵

参考视频1&#xff1a;https://www.bilibili.com/video/BV1H64y1T7zQ/?spm_id_from333.337.search-card.all.click 参考视频2&#xff08;正定矩阵&#xff09;&#xff1a;https://www.bilibili.com/video/BV1Ag411M76G/?spm_id_from333.337.search-card.all.click&vd_…

【JGit】 AddCommand 新增的文件不能添加到暂存区

执行git.add().addFilepattern(".").setUpdate(true).call() 。新增的文件不能添加到暂存区&#xff0c;为什么&#xff1f; 在 JGit 中&#xff0c;setUpdate(true) 方法用于在调用 AddCommand 的 addFilepattern() 方法时&#xff0c;将已跟踪文件标记为需要更新。…

C语言基础—习题及代码(一)

1.读取一个65到122之间的整型数&#xff0c;然后以字符形式输出它&#xff0c;比如读取了97&#xff0c;输出字符a #include <stdio.h> int main(){int n;scanf("%d",&n);if(n>65 && n<122){printf("%c\n",n);} } 2.判断某个年份…

windows安装部署node.js以及搭建运行第一个Vue项目

一、官网下载安装包 官网地址&#xff1a;https://nodejs.org/zh-cn/download/ 二、安装程序 1、安装过程 如果有C/C编程的需求&#xff0c;勾选一下下图所示的部分&#xff0c;没有的话除了选择一下node.js安装路径&#xff0c;直接一路next 2、测试安装是否成功 【winR】…

语义内核框架(Semantic Kernel)

语义内核框架-Semantic Kernel 首先看看官方描述&#xff1a;Semantic Kernel 是一个开源 SDK&#xff0c;可让您轻松构建可以调用现有代码的代理。作为高度可扩展的 SDK&#xff0c;可以将语义内核与来自 OpenAI、Azure OpenAI、Hugging Face 等的模型一起使用&#xff01;通…

vue3.4新特性:v-bind同名简写、defineModel

在上一篇 vue3.3 文章中&#xff0c;虽然写了 defineModel &#xff0c;但并未考虑到写的时候3.4版本里 defineModel 才作为稳定的API正式加入( 两年没看vue3 更新的内容了... )&#xff0c;并增加了对支持修饰符相关的内容&#xff1b; 基于此&#xff0c;如果在vue3.3的版本…

华为OD机试真题-智能成绩表-2023年OD统一考试(C卷)---Python3--开源

题目&#xff1a; 考察内容&#xff1a; sort(双排序&#xff09; if dict(keys;items()) 代码&#xff1a; """ analyze:input: int n 学生人数&#xff1b; int m 科目数量 科目名称&#xff08;不重复&#xff09; 人名(不会重名&#xff09; 科目成绩 …

Python 在Word中查找并高亮指定文本

当你需要在长文档或报告中快速找到特定的关键词或短语&#xff0c;Word中提供的查找并高亮这一功能可以帮助你迅速定位这些内容。本文将介绍如何使用Python在Word中查找并突出显示指定的文本。 所需工具&#xff1a;第三方库 Spire.Doc for Python。该库支持创建、编辑、转换Wo…

vue处理响应式数据,是Proxy性能好?还是defineProperty性能好?

注&#xff1a;本文主要论证二者性能&#xff01;&#xff01;&#xff01; 首先&#xff0c;Proxy和defineProperty是两种不同的机制&#xff0c;用于实现JavaScript的元编程&#xff08;metaprogramming&#xff09;功能。 defineProperty是ES5引入的一个特性&#xff0c;用于…

HDL FPGA 学习 - FPGA基本要素,开发流程,Verilog语法和规范、编写技巧

目录 Altera FPGA 基本要素 FPGA 开发流程和适用范围 设计和实施规范 顶层设计的要点 Verilog HDL 语法规范 编写规范 设计技巧 编辑整理 by Staok&#xff0c;始于 2021.2 且无终稿。转载请注明作者及出处。整理不易&#xff0c;请多支持。 本文件是“瞰百易”计划的…

SQL注入漏洞解析--less-6

1.第六关了。 2.这个和第五关有点像&#xff0c;只是换成了双引号&#xff0c;接下来的都一样&#xff0c;看我操作(换个函数试一下extractvalue&#xff0c;他的报错位置在第二个&#xff0c;那我就利用一下) 3.爆库名 ?id1"%20and%20extractvalue(1,concat(0x7e,(sele…

刷题日记 | 字符串扩容和增强型for循环

for(char c:s)遍历字符串 增强型for循环 C for(char c:s)遍历字符串 增强型for循环_c for (char c : s)-CSDN博客 字符串使用前要进行扩容 reserve函数 【CString类成员函数辨析】resize(),size(),capacity(),reserve()函数的解析与对比_c reserve函数-CSDN博客 a.size() 用来…

告警闪现后的故障排查

长期以来&#xff0c;医院信息化运维中存在着科室复杂、应用场景多、终端运维工作量大、软件系统兼容需求强等诸多痛点&#xff0c;且对技术设备的稳定性、连续性要求极高&#xff0c;在日常运维中&#xff0c;需要应对和解决这些问题来保障业务稳定、健康运行。 1、数据孤岛 …