在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并不错,因为两者之间的区别仅在于绑定命令或添加事件处理程序的地方。
你怎么看待这件事?
UYOU
九州编程