Esta es una pregunta justa, y que es un problema común, aunque "resuelto" (debatiblemente) dentro del ámbito de la arquitectura MVVM. Si está utilizando un marco de MVVM, es probable que encuentre algo similar al Comportamiento de EventToCommand, here es el ejemplo del MVVM Light Toolkit.
En resumen, esto le permite asignar un evento a una orden vinculante de este modo:
<Rectangle Fill="White"
Stroke="Black"
Width="200"
Height="100">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseEnter">
<cmd:EventToCommand Command="{Binding TestCommand,
Mode=OneWay}"
CommandParameter="{Binding Text,
ElementName=MyTextBox,
Mode=OneWay}"
MustToggleIsEnabledValue="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Rectangle>
Actualización:
hay otras dos soluciones "razonables" a este problema:
Uno usa la extensión heredada "AttachedCommandBehavior" ahora considerada here.
El otro es un poco irritante, pero viable.
- Capture un comando a través de en evento puramente en la vista.
- consulta DataSource del control Paso
- Grab una cadena objetivo vinculante identificador que denota su comando (tal vez usando una cadena const en la vista )
- Invoque el comando en el modelo de vista a través de pase reflexión y en los argumentos del comando.
Esto parece asqueroso, pero estoy bastante seguro de que en realidad es un poco más rápido que el simple uso de las vinculaciones de comando tradicionales . Para estar seguro de que necesitaría ver el IL, y no creo que importe en este caso.
/actualización
quiero señalar sin embargo que esto no siempre es una situación ideal.Descubrí que la mayoría de las veces, uso EventToCommand para cubrir un problema de diseño. Tenga en cuenta lo siguiente:
- Utilice eventos y código para manejar los comportamientos relacionados con la interfaz de usuario.
- Considere la posibilidad de crear controles personalizados que tengan enlaces de comandos si es necesario, especialmente si se encuentra utilizando comandos para encapsular eventos dirigidos por bevahior para establecer datos vinculados que luego se reflejan en la vista. (es decir, establecer un valor de transparencia basado en la proximidad a un control o algo similar)
- EventToCommand debería utilizarse para manejar eventos "tipo Comando" solamente (haciendo doble clic, etc.) eventos no reactivos (mouse-over). Sin embargo, no hay nada que lo impida. Implemente como mejor le parezca.
Lo más importante tal vez es que recuerde que usted es el desarrollador. Las pautas en sí mismas no resuelven los problemas, pero la consideración de las pautas puede hacer que la solución a un problema sea evidente.
Si aún no lo ha hecho, recomiendo las transmisiones de video MIX y Techday de Laurent Bungion, incluida la excelente transmisión MVVM de inmersión profunda MIX11, que cubre una gran cantidad de estos casos de borde MVVM. – Firoso