Pregunta

Tengo un DataTemplate que es para una clase que implementa INotifyPropertyChanged. ¿Hay alguna forma de activar un guión gráfico cuando una propiedad cambia y un guión gráfico diferente en diferentes valores (es un bool en este caso)?

¿Y hay alguna forma de activar un guión gráfico en el inicio dependiendo de los valores de la clase para la que está hecha la plantilla de datos?

¿Fue útil?

Solución

Sí, puedes hacer eso.

Agregue un DataTrigger y enlace a la propiedad respectiva. Aquí hay un ejemplo:

<DataTemplate.Triggers>
    <DataTrigger Binding="{Binding Path=MyProperty}" Value="True">
        <BeginStoryboard Storyboard="{StaticResource myStoryboard}"/>
    </DataTrigger>
</DataTemplate.Triggers>

Puede establecer el valor para probar lo que desee. Por lo tanto, puede configurar el guión gráfico para que comience cuando su valor cambie a falso. Puede agregar tantos DataTriggers (u otros disparadores) como desee.

Observe que en mi ejemplo hago referencia a una propiedad ficticia y un guión gráfico.

Cuando la propiedad cambia, el enlace se actualizará y activará el activador debido al enlace de datos.

Esta técnica también debería funcionar al inicio.

Otros consejos

Similar al póster anterior, también utilicé un DataTrigger y luego lo vinculé a una propiedad en mi ViewModel. Lo único que me pareció confuso fue dónde colocar el activador de datos. Lo puse directamente en el nodo raíz (es decir, Ventana). Lo creé usando Expression Blend, que se encargó de los detalles de los nombres de las etiquetas.

Asegúrese también de incluir en su proyecto una referencia a " Microsoft.Expression.Interactions "

XAML: (esto va directamente en el nodo raíz)

<Window
   xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
   xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" 
   x:Name="window" >

    ...

    <i:Interaction.Triggers>
      <ei:DataTrigger Binding="{Binding FlashingBackground, Mode=OneWay}" Value="ON">
        <ei:ControlStoryboardAction Storyboard="{StaticResource MyAnimation}"     
                                                ControlStoryboardOption="Play"/>
      </ei:DataTrigger>
    </i:Interaction.Triggers>

    ...
</Window>

ViewModel:

 private void TurnOnFlashingBackround()
    {
        FlashingBackground = "ON";
    }

    private string _FlashingBackround = "OFF";

    public string FlashingBackground
    {
        get { return _FlashingBackround; }

        private set
        {
            if (FlashingBackground == value)
            {
                return;
            }

            _FlashingBackround = value;
            this.OnPropertyChanged("FlashingBackground");
        }
    }

    public new event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

Finalmente, el modelo de vista debe heredar de " INotifyPropertyChanged "

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top