C# WPF編程之命令模型詳解
概述
使用路由事件可以響應(yīng)廣泛的鼠標(biāo)和鍵盤(pán)事件,這些事件是低級(jí)的元素。在實(shí)際應(yīng)用程序中,功能被劃分成一些高級(jí)的任務(wù)。這些任務(wù)可通過(guò)各種不同的動(dòng)作和用戶(hù)界面元素觸發(fā),包括主菜單、上下文菜單、鍵盤(pán)快捷鍵以及工具欄。
可在WPF中定義這些任務(wù)(也就是命令)并將控件連接到命令,從而不需要重復(fù)編寫(xiě)事件處理代碼。更重要的是,當(dāng)連接的命名不可用時(shí),命令特性通過(guò)自動(dòng)禁用控件來(lái)管理用戶(hù)界面的狀態(tài)。
將事件處理程序映射到事件:

將事件映射到命令:

WPF命令的缺點(diǎn):
- 命令跟蹤(例如,保留最近命令的歷史記錄);
- “可撤銷(xiāo)的”命令;
- 具有狀態(tài)并可處于不同“模式”的命令(例如,可被打開(kāi)或關(guān)閉的命令);
WPF命令模型
WPF命令模型有許多可變的部分組成。他們都具有如下4個(gè)重要元素:
命令: 命令表示應(yīng)用程序任務(wù),并且跟蹤任務(wù)是否能被執(zhí)行。然然,命令實(shí)際上不包含執(zhí)行應(yīng)用程序任務(wù)的代碼。
命令綁定: 每個(gè)命令綁定針對(duì)用戶(hù)界面的具體區(qū)域,將命令連接到相關(guān)的應(yīng)用程序邏輯。
命令源: 命令源觸發(fā)命令。
命令目標(biāo): 命令目標(biāo)是在其中執(zhí)行命令的元素。
ICommand接口
WPF命令模型的核心是System.Windows.Input.ICommand接口,該接口定義了命令的工作原理。該接口包含兩個(gè)方法和一個(gè)事件:
public interface ICommand
{
void Execute(object parameter);
bool CanExecute(object parameter);
event EventHandler CanExecuteChanged;
}
- Execute()方法將包含應(yīng)用程序任務(wù)邏輯(例如,打印文檔)。
- CanExecute()方法返回命令的狀態(tài),如果命令可用,返回true,否則返回false。
- CanExecuteChanged():當(dāng)命令狀態(tài)變化時(shí)引發(fā)該事件。
注:Execute()和CanExecute()方法都接受一個(gè)附加的參數(shù)對(duì)象。
RoutedCommand類(lèi)
當(dāng)創(chuàng)建自己的命令時(shí),不會(huì)直接實(shí)現(xiàn)ICommand接口,而是使用System.Windows.Input.RoutedCommand類(lèi),該類(lèi)自動(dòng)實(shí)現(xiàn)了ICommand接口。
RoutedCommand類(lèi)是WPF中唯一實(shí)現(xiàn)了ICommand接口的類(lèi)。
RoutedUICommand類(lèi)
在程序中處理的大部分命令不是RoutedCommand對(duì)象,而是RoutedUICommand類(lèi)的實(shí)例,RoutedUICommand類(lèi)繼承自RoutedCommand類(lèi)。
RoutedUICommand類(lèi)用于具有文本的命令,這些文本顯示在用戶(hù)界面中的某些地方(如,菜單項(xiàng)文本、工具欄按鈕的工具提示)。RoutedUICommand類(lèi)只增加了Text屬性,該屬性為命令顯示的文本。
為命令定義命令文本的優(yōu)點(diǎn)是可在某個(gè)位置執(zhí)行本地化。
到此這篇關(guān)于C# WPF編程之命令模型詳解的文章就介紹到這了,更多相關(guān)C# WPF命令模型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C# Winform程序?qū)崿F(xiàn)防止多開(kāi)的方法總結(jié)【親測(cè)】
這篇文章主要介紹了C# Winform程序?qū)崿F(xiàn)防止多開(kāi)的方法,結(jié)合實(shí)例形式總結(jié)分析了C# Winform防止多開(kāi)相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下2020-03-03
C# DataTable中查詢(xún)指定字段名稱(chēng)的數(shù)據(jù)
這篇文章主要介紹了C# DataTable中查詢(xún)指定字段名稱(chēng)的數(shù)據(jù),本文直接給出實(shí)例代碼,簡(jiǎn)單易懂,需要的朋友可以參考下2015-06-06
在C#中基于Semantic?Kernel的檢索增強(qiáng)生成(RAG)實(shí)踐記錄
SemanticKernel是一個(gè)用于集成和操作大語(yǔ)言模型的應(yīng)用程序框架,支持C#、Python和Java等多種編程語(yǔ)言,通過(guò)SemanticKernel,開(kāi)發(fā)者可以輕松構(gòu)建基于最新AI技術(shù)的應(yīng)用程序2024-10-10
Unity3D使用GL實(shí)現(xiàn)圖案解鎖功能
這篇文章主要為大家詳細(xì)介紹了Unity3D使用GL實(shí)現(xiàn)圖案解鎖功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03

