在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可以完全拆分代碼和頁面設計;程序員只關心編碼,而設計師只關心設計。但:
我從未見過任何使用Blend或了解XAML的設計師。
幾乎所有XAML都是由編碼員自己編寫的。

九州編程
TA貢獻1785條經驗 獲得超4個贊
代碼隱藏沒有本質上的壞處。對于簡單的情況,擁有它很好。但是,在許多情況下,UI邏輯可能變得難以管理。將該邏輯封裝在附加的行為和視圖模型中,使我們能夠隔離變量(并對其進行測試),從而更易于理解和維護。
如果需要考慮可測試性,則可以在視圖模型和附加行為中封裝的UI邏輯越多,無需借助UI測試就可以驗證的邏輯越多。(雖然它并不能完全消除對UI測試的需求,但它確實提供了進行UI測試之前的第一級驗證,這將花費更多的時間/資源。
- 3 回答
- 0 關注
- 982 瀏覽
相關問題推薦
添加回答
舉報
0/150
提交
取消