【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.pswp.cn/news/711741.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711741.shtml
英文地址,請注明出處:http://en.pswp.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、數據孤島 …