月關(guān)寶盒
2019-11-13 09:24:45
在Josh Smith 的文章“ 具有Model-View-ViewModel設(shè)計(jì)模式的WPF應(yīng)用程序”中,作者說(shuō):(1)在設(shè)計(jì)良好的MVVM架構(gòu)中,大多數(shù)視圖的背后代碼應(yīng)為空,或者最多只能包含操縱該視圖中包含的控件和資源的代碼。(2)有時(shí)也有必要在與ViewModel對(duì)象進(jìn)行交互的View的代碼隱藏中編寫代碼,例如,鉤住事件或調(diào)用否則很難從ViewModel本身調(diào)用的方法。我的問(wèn)題是,如下所示,為什么這樣的方法AttachedCommandBehavior或InvokeCommandAction試圖避免編碼背后的編碼。讓我解釋更多細(xì)節(jié)。就(1)而言,我認(rèn)為與AttachedCommandBehavior中的以下情況類似。為界沒(méi)有實(shí)現(xiàn)ICommandSource的MouseRightButtonDown,你不能經(jīng)常綁定的事件和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"/>我認(rèn)為使用上面的codebehind并不錯(cuò),因?yàn)閮烧咧g的區(qū)別僅在于綁定命令或添加事件處理程序的地方。你怎么看待這件事?
3 回答
UYOU
TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊
MVVM可以完全拆分代碼和頁(yè)面設(shè)計(jì);程序員只關(guān)心編碼,而設(shè)計(jì)師只關(guān)心設(shè)計(jì)。但:
我從未見過(guò)任何使用Blend或了解XAML的設(shè)計(jì)師。
幾乎所有XAML都是由編碼員自己編寫的。
九州編程
TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊
代碼隱藏沒(méi)有本質(zhì)上的壞處。對(duì)于簡(jiǎn)單的情況,擁有它很好。但是,在許多情況下,UI邏輯可能變得難以管理。將該邏輯封裝在附加的行為和視圖模型中,使我們能夠隔離變量(并對(duì)其進(jìn)行測(cè)試),從而更易于理解和維護(hù)。
如果需要考慮可測(cè)試性,則可以在視圖模型和附加行為中封裝的UI邏輯越多,無(wú)需借助UI測(cè)試就可以驗(yàn)證的邏輯越多。(雖然它并不能完全消除對(duì)UI測(cè)試的需求,但它確實(shí)提供了進(jìn)行UI測(cè)試之前的第一級(jí)驗(yàn)證,這將花費(fèi)更多的時(shí)間/資源。
添加回答
舉報(bào)
0/150
提交
取消
