WPF 的 MVVM 的分析理解(二)
阿新 • • 發佈:2019-02-20
為了讓你的 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 通訊。
但是在上面的結構中還有一個問題:command 類和 ViewModel 類存在著過度耦合的情況。如果你還記得 command 類程式碼(我在下面貼出來了)中的建構函式是傳遞了 ViewModel 物件,這意味著這個 command 類無法被其它的 ViewModel 類所複用。
public class ButtonCommand : ICommand
{
private CustomerViewModel obj; // Point 1
public ButtonCommand(CustomerViewModel _obj) // Point 2
{
obj = _obj;
}
......
......
......
}
!