or que evitar o codebehind no padrão WPF MVV
No artigo,plicativos @WPF com o padrão de design Model-View-ViewModel, o autor que é Josh Smith disse:
(1) Em uma arquitetura MVVM bem projetada, o código por trás da maioria das Views deve estar vazio ou, no máximo, conter apenas código que manipule os controles e os recursos contidos nessa exibição. (2) Às vezes, também é necessário escrever código no código de um View que interaja com um objeto ViewModel, como conectar um evento ou chamar um método que, de outra forma, seria muito difícil de invocar a partir do próprio ViewModel.
Minha pergunta é, no (1), por que o código vazio por trás é considerado um MVVM bem projetad (Parece que o código vazio por trás é sempre bom.)
EDIT: Minha pergunta é, como segue, por que uma abordagem como aAttachedCommandBehavior
ou oInvokeCommandAction
tenta evitar o código por trás da codificaçã
eixe-me explicar mais detalhe
No que diz respeito ao (1), eu pensaria na seguinte situação a partir do AttachedCommandBehavior. Como a fronteira não implementa oICommandSource
para oMouseRightButtonDown
, normalmente não é possível vincular o evento e oICommand
, mas pode fazer com o 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>
O
Podemos fazer isso com oSystem.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>
MAS
Usamos o XAML a seguir e seu código por trás do códigoBorder_MouseRightButtonDown
, que está vinculado ao (2) Josh Simth dito acim
<Border MouseRightButtonDown ="Border_MouseRightButtonDown"/>
Acho que usar o codebehind como acima não é ruim, apenas porque a diferença entre eles é apenas onde está a ligação de um comando ou a adição de um manipulador de evento
O que você pensa sobre isso