1. 程式人生 > >WPF與MVVM的實現(四)命令繫結

WPF與MVVM的實現(四)命令繫結

    接觸WPF已經有兩年,大大小小開發過幾個專案,但從來沒有系統的去學習過。幾次開發專案時都覺得十分的惱火,太多的事件稍微考慮不到位就會帶來麻煩,為此特地系統的看了一本《C#高階程式設計》第10版,瞭解到MVVM框架,看了之後十分歡喜,本篇記錄研究MVVM過程。

0001 ICommand介面的實現

public class RelayCommand : ICommand

{

#region Fields

 

readonly Action<object> _execute;

readonly Predicate<object> _canExecute;

 

#endregion // Fields

 

#region Constructors

 

/// <summary>

/// Creates a new command that can always execute.

/// </summary>

/// <param name="execute">The execution logic.</param>

public RelayCommand(Action<object> execute)

: this(execute, null)

{

}

 

/// <summary>

/// Creates a new command.

/// </summary>

/// <param name="execute">The execution logic.</param>

/// <param name="canExecute">The execution status logic.</param>

public RelayCommand(Action<object> execute, Predicate<object> canExecute)

{

if (execute == null)

throw new ArgumentNullException("execute");

 

_execute = execute;

_canExecute = canExecute;

}

 

#endregion // Constructors

 

#region ICommand Members

 

[DebuggerStepThrough]

public bool CanExecute(object parameters)

{

return _canExecute == null ? true : _canExecute(parameters);

}

 

public event EventHandler CanExecuteChanged

{

add { CommandManager.RequerySuggested += value; }

remove { CommandManager.RequerySuggested -= value; }

}

 

public void Execute(object parameters)

{

_execute(parameters);

}

 

#endregion // ICommand Members

 

}



0010 不帶引數的命令繫結

前臺:

<Button x:Name="button" Content="新增" Command="{Binding AddTimeCommand}" HorizontalAlignment="Left" Margin="288,158,0,0" VerticalAlignment="Top" Width="89" Height="36">

 

</Button>


後臺:

RelayCommand _addTimeCommand = null;

public ICommand AddTimeCommand

{

get

{

if (null == _addTimeCommand)

{

_addTimeCommand = new RelayCommand((p) => OnAddTime(), (p) => CanAddTime());

}

return _addTimeCommand;

}

}

bool CanAddTime()

{

return true;

}

void OnAddTime()

{

MyDateTime.Add(DateTime.Now.ToString());

}




0011 帶引數的命令繫結

前臺:

<Button x:Name="button2" Content="修改" Command="{Binding ChangeTimeCommand}" CommandParameter="button2" HorizontalAlignment="Left" Margin="382,199,0,0" VerticalAlignment="Top" Width="89" Height="36">

</Button>


後臺:

public RelayCommand ChangeTimeCommand

{

get

{

return new RelayCommand(OnChangeTime, CanChangeTime);

}

}

bool CanChangeTime(object parameter)

{

return true;

}

void OnChangeTime(object parameter)

{

if (MyDateTime.Count > 0)

{

MyDateTime.RemoveAt(0);

MyDateTime.Insert(0, DateTime.Now.ToString());

}

}


相關推薦

WPFMVVM實現命令

    接觸WPF已經有兩年,大大小小開發過幾個專案,但從來沒有系統的去學習過。幾次開發專案時都覺得十分的惱火,太多的事件稍微考慮不到位就會帶來麻煩,為此特地系統的看了一本《C#高階程式設計》第10版,瞭解到MVVM框架,看了之後十分歡喜,本篇記錄研究MVVM過程。 00

WPF學習筆記:資料模式INotifyPropertyChanged介面

資料繫結模式共有四種:OneTime、OneWay、OneWayToSource和TwoWay,預設是TwoWay。一般來說,完成資料繫結要有三個要點:目標屬性是依賴屬性、繫結設定和實現了INotifyPropertyChanged介面的資料來源(資料上下文)。 One

SpringMvc 學習 引數

引數繫結就是從前端頁面傳遞資料到後臺程式 本文分四部分 1.簡單型別的引數繫結 2.物件型別的引數繫結 3.物件型別的包裝類的引數繫結 4.自定義引數繫結 繫結簡單型別 當請求的引數名稱和處理器形參名稱一致時會將請求引數與形參進行繫結。 這樣,從

模型類的設計實現

介紹 傳遞數據 規則 添加 play using ota 實體類 重要 實體類是現實實體在計算機中的表示。它貫穿於整個架構,負擔著在各層次及模塊間傳遞數據的職責。 一般來說,實體類可以分為“貧血實體類”和“充血實體類”,前者僅僅保存實體的屬性,而後者還包含一些實體間的關系與

MVVM模式解析和在WPF中的實現

開發 特點 還需 如果 情況下 依次 顯示 尋找 這也 MVVM模式簡介 MVVM是Model、View、ViewModel的簡寫,這種模式的引入就是使用ViewModel來降低View和Model的耦合,說是降低View和Model的耦合。也可以說是是降低界面和邏輯的耦合

認證鑑權API許可權控制在微服務架構中的設計實現

引言: 本文系《認證鑑權與API許可權控制在微服務架構中的設計與實現》系列的完結篇,前面三篇已經將認證鑑權與API許可權控制的流程和主要細節講解完。本文比較長,對這個系列進行收尾,主要內容包括對授權和鑑權流程之外的endpoint以及Spring Security過濾器部分踩坑的經歷。歡迎閱讀本系列

OpenStack設計實現訊息匯流排AMQP

在西方有一句諺語,叫做“Don’t Reinvent the Wheel!”。直譯過來就是不要在重新發明輪子了。也就是說我們應該避免做一些重複性的工作,如果一個東西別人已經做過了,那麼我們拿來直接用就行了,沒有必要重新制作,這一點在軟體開發裡尤為突出。所以在Op

機器學習神經網路:BP神經網路的介紹和Python程式碼實現

前言:本篇博文主要介紹BP神經網路的相關知識,採用理論+程式碼實踐的方式,進行BP神經網路的學習。本文首先介紹BP神經網路的模型,然後介紹BP學習演算法,推導相關的數學公式,最後通過Python程式碼實現BP演算法,從而給讀者一個更加直觀的認識。 1.BP網路模型 為了將理

訊息中介軟體——RabbitMQ命令管控臺的基本操作!

前言 在前面的文章中我們介紹過RabbitMQ的搭建:RabbitMQ的安裝過以及各大主流訊息中介軟體的對比:,本章就主要來介紹下我們之前安裝的管控臺是如何使用以及如何通過命令列進行操作。 1. 命令列操作 1.1 基礎服務的命令操作 rabbitmqctl stop_app:關閉應用 rabbitm

java面向對象設計模式

工廠方法模式 java 選擇 缺點 一個 聯系 面向 抽象工廠 pan 第五式 抽象工廠模式 定義:提供一個創建一系列相關或相互依賴對象的接口,而無需指定他們具體的類。(創建的對象之間有約束) 抽象工廠模式的本質:選擇產品簇的實現 優點:分離接口和產品簇,使得切換產品簇變得

Andrew Ng機器學習筆記+Weka相關算法實現SVM和原始對偶問題

優化問題 坐標 出了 變量 addclass fun ber 找到 線性 這篇博客主要解說了Ng的課第六、七個視頻,涉及到的內容包含,函數間隔和幾何間隔、最優間隔分類器 ( Optimal Margin Classifier)、原始/對偶問題 ( Pr

Docker入門應用系列網絡管理

效率 進行 oop 網絡隔離 style docker utc 同時 存在 一、Docker的五種網絡模式   在使用docker run創建docker容器時,可以用--net選項指定容器的網絡模式,Docker有以下5種網絡模式:   1. bridge模式

接口方法重載解析

再看 ... n) 情況 測試 擴展 自動拆箱 調用方法 都是 一、方法重載簡介 方法重載: 當兩個(或多個)方法的名稱相同,而參數的對應類型或個數不同時,我們就說方法重載了。當然,編譯器也能識別出來。 編譯器是如何識別調用了哪個方法? ??在往下講前,我們先來了解一下:編

WPF中的動畫——緩動函數

soft one duration black white tro src con 資料 原文:WPF中的動畫——(四)緩動函數緩動函數可以通過一系列公式模擬一些物理效果,如實地彈跳或其行為如同在彈簧上一樣。它們一般應用在From/To/By動畫上,可以使得其動畫更加平滑。

數據結構實現二叉查找樹java實現

.com ML treenode 設置 AC getparent 邏輯圖 技術分享 ldb 轉載 http://www.cnblogs.com/CherishFX/p/4625382.html 二叉查找樹的定義:   二叉查找樹或者是一顆空樹,或者是一顆具有以下特性的非空二

數據結構算法-線性表之循環鏈表

log ddc 兩個 方向 http return close 單向 throw 前言:前面幾篇介紹了線性表的順序和鏈式存儲結構,其中鏈式存儲結構為單向鏈表(即一個方向的有限長度、不循環的鏈表),對於單鏈表,由於每個節點只存儲了向後的指針,到了尾部標識就停止了向後鏈的操作。

FIFOLRU實現Java

固定 blank per shu static 置換 ted clas als 一、概述 在學操作系統的時候,會接觸到頁面緩存調度算法。緩存不可能是無限大的,所以會涉及到一些置換策略,來保證緩存的命中率。常見的有:FIFO、LRU、LFU、OPT策略等。 1、緩存置換算法

OpenCV學習筆記30KAZE 演算法原理原始碼分析KAZE特徵的效能分析比較

      KAZE系列筆記: 1.  OpenCV學習筆記(27)KAZE 演算法原理與原始碼分析(一)非線性擴散濾波 2.  OpenCV學習筆記(28)KAZE 演算法原理與原始碼分析(二)非線性尺度空間構

Java常用的八種排序演算法程式碼實現:桶排序、計數排序、基數排序

三種線性排序演算法:桶排序、計數排序、基數排序 線性排序演算法(Linear Sort):這些排序演算法的時間複雜度是線性的O(n),是非比較的排序演算法 桶排序(Bucket Sort)   將要排序的資料分到幾個有序的桶裡,每個桶裡的資料再單獨進行排序,桶內排完序之後,再把桶裡的

Java常用的八種排序演算法程式碼實現:歸併排序法、快速排序法

注:這裡給出的程式碼方案都是通過遞迴完成的 --- 歸併排序(Merge Sort):   分而治之,遞迴實現   如果需要排序一個數組,我們先把陣列從中間分成前後兩部分,然後對前後兩部分進行分別排序,再將排好序的數組合並在一起,這樣整個陣列就有序了   歸併排序是穩定的排序演算法,時間