Stylet框架探索(1)

2021-09-19 14:41:05 字數 1650 閱讀 2475

一開始做mvvm的程式時,就知道有現成的框架,但個人並沒有使用。做著做著就發現mvvm模式有乙個最大的問題:**量遠遠超出了不用mvvm模式做的程式。這些**感覺就是一些重複的**,但又沒辦法省略。後來終於知道,原來框架就能解決這個問題。

stylet是一款很輕量卻功能強大的wpf mvvm框架,了解了一下,感覺還不錯。不過一開始,我就遇到了一些無解的問題:

1、當製作無邊框視窗時(也就是windowstyle為none),你在viewmodel根本沒辦法讓視窗最大化、最小化等。

2、拖動視窗,讓某個控制項獲得焦點,到目前也沒有找到辦法。

當然,除了這些(這些在不使用stylet的時候要實現也是很複雜的,只是用stylet之後更是無從下手),stylet的確讓我們減少了極大的**編寫工作量。

stylet的文件裡面,建議我們直接把*.xaml.cs檔案刪除,因為他覺得完全不需要。但就目前我遇到的問題來看,這些cs檔案還是保留下來比較好。mvvm模式在最理想的情況下,view層和邏輯**是完全分開的,也就是*.xaml.cs裡不要寫任何**。但有的時候,為了做到這一點,需要付出極大的代價(例如本來的this.windowstate=windowstate.minimize語句需要用幾十行**實現)。其實追根到底,mvvm模式的目的就是為了讓程式的可維護性更好。讓視窗最小化、最大化、或是拖動視窗、改變視窗大小這種**,幾乎是不會有什麼問題的,也沒有什麼維護的問題。所以個人覺得,此類**,如果實在沒有辦法,放在*.xaml.cs裡也關係不大。

使用mvvm模式,在viewmodel裡面,每個屬性都幾乎要這麼寫:

private int property1;

public int property1

set}private int property2;

public int property2

set}

加入propertychanged.fody包之後,不用寫任何**,公開的屬性自然就會通知跟它繫結的控制項。我們的**可以變成這樣:

public int property1

public int property2

是不是這樣感覺好多了!

沒錯,用mvvm模式,寫事件也是很煩人的。我們來比較一下:

非mvvm模式,xaml端:

mvvm模式,xaml端:

非mvvm模式,xaml.cs:

private void maximize_click(object sender, routedeventargs e)

mvvm模式,viewmodel:

private basecommand loginclick;

public basecommand loginclick

)); }

return loginclick;

}}

有沒有覺得很煩?反正我是寫得煩了。使用stylet之後,這個狀況可以得到極大的改善。mvvm模式的寫法就像非mvvm模式的寫法一樣。具體怎麼做,stylet的作者已經寫了很詳細的文件,還有示例,讀者可以參考。我只打算寫一些使用stylet過程中遇到的一些比較麻煩的問題和一些注意事項。

jquery 屬性框架探索

屬性操作 新增var element p eq 1 element.attr name 神仙 屬性操作 刪除element p eq 1 element.removeattr name 屬性操作 addclasselement p eq 1 element.addclass add hide 屬性操...

boost asio 網路部分框架探索

asio 網路相關部分類關係 1.get service用於獲取平台的服務 iocp,reactive的支援 2.get implementation操作資源的集合 socket控制代碼,本地位址,遠端位址,協議型別等 繼承自他的所有類,都是通過這兩個介面來呼叫本地服務的。open,assign,b...

1入門 5探索資料

b 搜尋api b get bank search?q sort account number asc pretty rest方式搜尋bank索引下的所有資料,並且按照account number 上公升方式返回 類似下面的搜尋方式 get bank search body為 sort b 初步學習...