標籤:wpf width 問題 成本 img 另一個 情況下 alt page
今天去書店看到一本名為《c#物聯網程式設計基礎》的書,對物聯網感興趣的我抓起來就看,書中的項目都是上位機開發項目,較簡單,如果物聯網開發只是這樣,看起來我做物聯網開發也是綽綽有餘。這邊書我看了十幾分鐘就看完了,其中的技術硬傷讓我不得不正視。此書說使用wpf來寫程式,但除了建立一個WPF項目,用WPF來寫介面,和wpf沒任何關係,代碼還是寫在後台,後台代碼還是以Winform的方式來寫。請問作者是不是對WPF有什麼誤解?
用WPF來寫你不用MVVM模式來寫?好吧,就算因為是小項目,不用MVVM模式來寫,後台代碼也以WPF來寫吧?比如命令、綁定、值轉換器等,下面列舉書裡的幾個例子,來讓大家看看本書中的技術瑕疵。
這裡定義了一個實體類,既然定義了實體類,那順便用mvvm模式來分層很難嗎?
實現函數btnCollect_Click,讓button上顯示“開始採集”、“停止採集”有很多優雅的方式,為何用這麼醜陋的方式實現?既然本書說用wpf來寫的,在類裡也定義了isCollecting的布爾類型,直接用WPF的值轉換器更直截了當,定義一個屬性,在button上綁定此屬性的值轉換,函數btnCollect_Click一句話代碼就能實現了,也能讓讀者體會了什麼是WPF,WPF的精韻是什麼。而且就算是像書中的方式來實現函數btnCollect_Click,寫個變數很難嗎?先將“開始採集”、“停止採集”分別賦予兩個不同的字串變數,再在這裡調用不可以?沒有經驗的人可能覺得多此一舉。但想象一下,當需要在另一個函數中也要讓此button顯示“開始採集”、“停止採集”,賦予變數的方式是不是就方便了很多?而當“開始採集”的文字要修改為“開始”或其它字元時,你不用到幾個地方修改文字,只需要修改字串變數的值。可能有人說這是小項目,這樣做多此一舉。但好的習慣就應該從開始接觸編程做起。要是像書中這樣的編程習慣用到項目中,輕則狗血噴頭,重則被辭退。
如果是用WPF來實現函數Page_Loaded,像書中這樣的方式是要被噴的——書中是標準的winform做法。WPF的做法是定義串口、傳輸速率的集合或類,然後分別綁定到下拉框清單控制項cmbPort、cmbBaudRate上。
如果說上面是用WPF寫後台代碼,與後台代碼結合方面有問題,那下面說到的就是作者使用WPF布置介面方面的問題:
1、控制項的共用樣式都寫在了控制項裡而不是寫在共用樣式裡,如果實習生敢這樣寫亂棍打死。
2、WPF控制項中的高度、寬度一般不用Height,而是用MinHeight、MaxHeight來定義最小高度、最大高度,以讓控制項實現不同視窗大小情況下的自適應——這是WPF寫介面的優勢,而作者拋棄了,用winform的思維來實現,介面代碼中充斥著大量的Margin也是winform思維的體現。
也許作者解釋:引入大量的WPF特性,會增加學習成本。那你可以分成Winform項目和WPF項目。winform項目作為書中標準的一部分,而wpf項目則作為擴充閱讀,讓對真正WPF技術有興趣的人去學習。而不是說“本書用到wpf”而硬生生的一直用winform方式寫項目,這可能會導致讀者對WPF的誤解,可能將讀者誤入歧途。
最後,祝《c#物聯網程式設計基礎》下一版本實現質的飛躍!
談談書本《c#物聯網程式設計基礎》中的技術瑕疵,如果你將要讀本書,請進來看看!