亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么要避免WPF MVVM模式中的代碼隱藏?

為什么要避免WPF MVVM模式中的代碼隱藏?

月關寶盒 2019-11-13 09:24:45
在Josh Smith 的文章“ 具有Model-View-ViewModel設計模式的WPF應用程序”中,作者說:(1)在設計良好的MVVM架構中,大多數視圖的背后代碼應為空,或者最多只能包含操縱該視圖中包含的控件和資源的代碼。(2)有時也有必要在與ViewModel對象進行交互的View的代碼隱藏中編寫代碼,例如,鉤住事件或調用否則很難從ViewModel本身調用的方法。我的問題是,如下所示,為什么這樣的方法AttachedCommandBehavior或InvokeCommandAction試圖避免編碼背后的編碼。讓我解釋更多細節。就(1)而言,我認為與AttachedCommandBehavior中的以下情況類似。為界沒有實現ICommandSource的MouseRightButtonDown,你不能經常綁定的事件和ICommand,但可以用做AttachedCommandBehavior。<!-- I modified some code from the AttachedCommandBehavior to show more simply --><Border>    <local:CommandBehaviorCollection.Behaviors>           <local:BehaviorBinding Event="MouseRightButtonDown"                   Command="{Binding SomeCommand}"                   CommandParameter="A Command on MouseRightButtonDown"/>    </local:CommandBehaviorCollection.Behaviors></Border>要么我們可以使用System.Windows.Interactivity.InvokeCommandAction。<Border xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" >    <i:Interaction.Triggers>        <i:EventTrigger EventName="MouseRightButtonDown">            <i:InvokeCommandAction Command="{Binding SomeCommand}"                CommandParameter="A Command on MouseRightButtonDown"/>        </i:EventTrigger>    </i:Interaction.Triggers></Border>但,我們使用下面的XAML及其代碼背后的Border_MouseRightButtonDown方法,該方法鏈接到上述(2)Josh Simth。<Border MouseRightButtonDown ="Border_MouseRightButtonDown"/>我認為使用上面的codebehind并不錯,因為兩者之間的區別僅在于綁定命令或添加事件處理程序的地方。你怎么看待這件事?
查看完整描述

3 回答

?
UYOU

TA貢獻1878條經驗 獲得超4個贊

MVVM可以完全拆分代碼和頁面設計;程序員只關心編碼,而設計師只關心設計。但:

  1. 我從未見過任何使用Blend或了解XAML的設計師。

  2. 幾乎所有XAML都是由編碼員自己編寫的。


查看完整回答
反對 回復 2019-11-13
?
九州編程

TA貢獻1785條經驗 獲得超4個贊

代碼隱藏沒有本質上的壞處。對于簡單的情況,擁有它很好。但是,在許多情況下,UI邏輯可能變得難以管理。將該邏輯封裝在附加的行為和視圖模型中,使我們能夠隔離變量(并對其進行測試),從而更易于理解和維護。

如果需要考慮可測試性,則可以在視圖模型和附加行為中封裝的UI邏輯越多,無需借助UI測試就可以驗證的邏輯越多。(雖然它并不能完全消除對UI測試的需求,但它確實提供了進行UI測試之前的第一級驗證,這將花費更多的時間/資源。


查看完整回答
反對 回復 2019-11-13
  • 3 回答
  • 0 關注
  • 982 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號