mvvm框架的原理和好處?
對于一般程序語言,執行分為3種:
1)編譯成二進制機器代碼,由操作系統調用執行;典型的如C,C++,Delphi等.
2)編譯成中間語言,由虛擬機解釋來執行或及時編譯后執行(前者的典型是java,后者的典型是DotNet).
3)不進行編譯,有解釋器邊解釋邊執行,比較典型的是VB和HTML,Javascript.等
上邊這些與WPF有關系么?其實是有的,至少原理上非常相似.我們來看看WPF的XAML的執行機制:
1)首先是實例化頁面類;
2)然后構建界面元素(控件樹),這里很關鍵,因為xaml文件里有界面元素的描述性信息,對于一個界面元素E:
A)首先實例化E,知道界面元素的類名,利用反射機制很容易實例化該類.
B)設置屬性,同樣利用反射機制,將字符串描述的屬性值設置賦給實例,這個原理很簡單,但要做得很好,是需要一個簡單的解釋器的.
C)屬性可以掛接,事件也當然可以動態掛接,但一般情況下,事件掛接時目標方法只能在頁面實例里。
D)到此,一個界面元素就內存實例化了,然后放入當前頁面的控件樹里。實例化界面元素本來就是遞歸完成的,控件樹的完成比較容易。
當然最后,會將有Name的元素實例賦給頁面類實例里相應的成員變量,這樣頁面代碼方法里應用該控件的代碼就能正常執行了。這種執行機制與上面提到的3種方式中的第3種方式非常類似。頁面元素屬性(包括事件)的描述和具體頁面代碼分開的方式,很多地方都采用,比如Aspx,Dfm等。