在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 关注
- 934 浏览
相关问题推荐
添加回答
举报
0/150
提交
取消