CozyRSS开发记录19-窗口标题栏交互
CozyRSS開發(fā)記錄19-窗口標(biāo)題欄交互
1、談?wù)剬?span style="font-family:SimHei;">mvvm解耦的看法
在使用mvvm時,如何操作窗口,這是一個問題。這個問題的關(guān)鍵點是:mvvm是把view和viewmodel解耦了的,很多寫法一不小心又把它們耦合起來了。
那么,view和viewmodel解耦有什么好處,不解偶又有什么壞處呢?我這里也不深入討論了,只說一個場景:CozyRSS假使要做android版和ios版了,我的model和處理的庫肯定是不用改的,那viewmodel需要改嗎?
前面說到,mvvmlight是跨平臺的,本身是可以在xamarin里用的。那么,理想的情況是,我只需要重寫view,修改控件和布局,內(nèi)容和命令依然是綁定在viewmodel上的。那么問題來了,viewmodel如果依賴了view,那就非改不可了。
舉一個這樣的例子:
?
這是SO上某個答主的答案,如何在用mvvm的情況下,實現(xiàn)窗口拖動。這里view并沒有什么問題,綁定到命令。接下來看viewmodel:
?
這里,viewmodel依賴到Window了,換View的時候,非改不可了。
針對這種情況,有幾種處理方法:依賴屬性、消息...不管哪種方法,總之,就是讓viewmodel在不知道view的情況下,通知view做點事情。我用了另外一種取巧的方法,提供一些Actions類,Actions會依賴view,而viewmodel依賴Actions。雖然viewmodel依然多了依賴,但是移植時,只需要考慮到這些需要修改的Actions,而不用動viewmodel,而需要修改的依賴view的Actions是很少的。
2、Actions
我們需要讓標(biāo)題欄支持:窗口拖動、雙擊最大化。對應(yīng)的代碼很簡單:
?
然后讓viewmodel依賴這些Actions,而不依賴view:
?
3、綁定事件
最后,我們用EventTrigger來綁定下兩個事件:
?
至此,窗口標(biāo)題欄支持拖動和雙擊最大化就完成了。
轉(zhuǎn)載于:https://www.cnblogs.com/zapline/p/5526795.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的CozyRSS开发记录19-窗口标题栏交互的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TableView didSelectR
- 下一篇: java 中变量的存储与引用