1. 程式人生 > >WPF 的 MVVM 的分析理解(二)

WPF 的 MVVM 的分析理解(二)

為了讓你的 ViewModel 類能夠實現通知,我們必須做三件事情。這三件事情都在下面的程式碼註釋中指出,例如 Point1, Point2 和 Point3。

Point1: 如下面程式碼那樣實現“INotifyPropertyChanged”介面。一旦你實現了該介面,它就建立了物件的“PropertyChangedEventHandler”事件。

Point2 和 3: 在“Calculate”方法中用“PropertyChanged”物件去觸發事件,並在其中指定了某個屬性的通知。在這裡是“Tax”屬性。安全起見,我們同樣也要檢查“PropertyChanged”是否不為空。

public
 class CustomerViewModel : INotifyPropertyChanged // Point 1 { …. ….         public void Calculate()         {             obj.CalculateTax();             if (PropertyChanged != null// Point 2             {                 PropertyChanged(this,new PropertyChangedEventArgs("Tax"));             // Point 3
            }         }         public event PropertyChangedEventHandler PropertyChanged; }

如果你執行程式,你應該可以看見當點選按鈕後“Tax”值被更新了。

第四步:在 ViewModel 中解耦執行動作

到目前為止,我們用 MVVM 框架建立了一個簡單的介面。這個介面同時包含了屬性和命令實現。我們擁有了一個檢視,它的 UI 輸入元素(例如 textbox)通過繫結和 ViewModel 連線起來,它的任何執行動作(例如按鈕點選)通過命令和 ViewModel 連線起來。ViewModel 和內部的 Model 通訊。

Simple MVVM

但是在上面的結構中還有一個問題:command 類和 ViewModel 類存在著過度耦合的情況。如果你還記得 command 類程式碼(我在下面貼出來了)中的建構函式是傳遞了 ViewModel 物件,這意味著這個 command 類無法被其它的 ViewModel 類所複用。

public class ButtonCommand : ICommand
    {
        private CustomerViewModel obj; // Point 1
        public ButtonCommand(CustomerViewModel _obj) // Point 2
        {
            obj = _obj;
        }
......
......
......

}