silverlight silverlight-4.0 datatrigger vsm

¿Cuál es el reemplazo para DataTrigger en Silverlight?



silverlight-4.0 vsm (4)

Este es mi escenario.

Tengo 2 propiedades. Tipo y estado.

Tipo es un Enum con 3 valores, por ejemplo, bola, carro, flecha. El estado es un int que aceptaría 3 valores de estado, por ejemplo, -1, 0, 1. Además, tengo 9 imágenes para cada valor de estado.

Al igual que, si selecciono tipo como bola y valor como -1, quiero mostrar una bola de color rojo. Si selecciono tipo como flecha y valor como 1, quiero mostrar una flecha hacia arriba. etc.,

Soy capaz de hacer esto en WPF. He creado 3 DataTemplates con una imagen vacía. Luego, uso DataTrigger para verificar y actualizar la imagen en particular para el StateValue seleccionado.

Pero, en Silverlight, ¿cómo puedo hacer esto. Lo sé, tengo que hacerlo en VSM. Pero me gustaría saber algunos detalles más con respecto a esta (o) cualquier alternativa disponible.


Acabo de usar un convertidor que toma tu objeto con 2 propiedades y devuelve una imagen. Código así en XAML puro es doloroso y realmente pertenece a C #.


La publicación del blog "Expression SDK in Silverlight - DataTrigger Example" lo cubre bastante bien. Aquí hay una muestra de lo que hace:

<i:Interaction.Triggers> <ia:DataTrigger Binding="{Binding IsEnabled}" Comparison="Equal" Value="false"> <ia:ControlStoryboardAction Storyboard="{StaticResource DisableStoryboard}"></ia:ControlStoryboardAction> </ia:DataTrigger> <ia:DataTrigger Binding="{Binding IsEnabled}" Comparison="Equal" Value="true"> <ia:ControlStoryboardAction Storyboard="{StaticResource EnableStoryboard}"></ia:ControlStoryboardAction> </ia:DataTrigger> </i:Interaction.Triggers>

(Con los dos prefijos de espacio de nombres XML i e ia definidos como sigue :)

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:ia="http://schemas.microsoft.com/expression/2010/interactions"


Para ampliar la publicación de Mike Post, aquí está el XAML en caso de que no tengas Blend.

Necesita agregar referencias a Microsoft.Expression.Interactions y System.Windows.Interactivity.

xmlns:ia="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions" xmlns:iv="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

Luego, bajo su control, al mismo nivel que VisualStateManager, coloque esto:

<iv:Interaction.Triggers> <ia:DataTrigger Binding="{Binding PropertyName}" Value="PropertyValue" > <ia:GoToStateAction StateName="StateName" /> </ia:DataTrigger> </iv:Interaction.Triggers>


Usaría los comportamientos de GoToState con DataTriggers en Silverlight. Bastante simple en Blend:

Ponga toda su lógica para lo que lo lleva a un estado diferente en su modelo de vista. Exponer el estado como una enumeración. Abre la pestaña Estados. Cree un nuevo grupo de estado (si aún no tiene uno). Crea tus estados. Desde la pestaña Activos, seleccione Comportamientos. Arrastre el comportamiento de GoToState desde la pestaña Activos y suéltelo en su elemento visual raíz. En el panel de Propiedades, haga clic en el botón "Nuevo" al lado de TriggerType y seleccione Data Trigger. ¿Recuerdas esa enumeración en tu modelo de vista? Establezca el enlace de activación en la enumeración del estado en el modelo de vista. Establezca el valor de activación en el valor de la enumeración. Establezca StateName en el estado de destino.

Blend ahora debería haber generado todo el VSM XAML por ti. Una vez que se familiarice con las cosas, verá cómo, en algunos escenarios, ni siquiera necesita la enumeración en el modelo de vista; podrá eliminar completamente el estado de la vista.