Frage

Ich habe eine Datatemplate, die für eine Klasse, die INotifyPropertyChanged implementiert. Gibt es eine Möglichkeit ein Storyboard, wenn eine Eigenschaft ändert und eine andere Storyboard auf verschiedene Werte (es ist ein Bool in diesem Fall) auslösen?

Und ist es eine Möglichkeit, ein Storyboard auszulösen beim Start auf Werte in der Klasse abhängig, dass die Datatemplate für gemacht?

War es hilfreich?

Lösung

Ja, Sie können das tun.

ein Datatrigger hinzufügen und an die jeweilige Eigenschaft binden. Hier ein Beispiel:

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

Sie können den Wert für Sie wollen etwas zu testen. So könnte man das Storyboard gesetzt zu beginnen, wenn Ihr Wert auf false ändert. Sie können so viele DataTriggers (oder andere Auslöser) hinzufügen, wie Sie möchten.

Beachten Sie, dass ich in meinem Beispiel eine Dummy-Eigenschaft und Storyboard verweisen.

Wenn die Eigenschaft ändert, wird die Bindung aktualisiert und den Abzug wegen der Datenbindung ausgelöst.

Diese Technik sollte auch beim Start arbeiten.

Andere Tipps

ähnlich das Plakat oben, habe ich auch einen Datatrigger und band sie dann auf eine Eigenschaft in meinem Viewmodel. Das einzige, was ich gefunden verwirrend war, wo die Daten-Trigger zu setzen. Ich habe es direkt in dem Wurzelknoten (d.h. Fenster). Ich habe es Expression Blend verwenden, die für mich der Tag-Namens Details kümmerten.

Auch stellen Sie sicher, einen Verweis in Ihrem Projekt gehört zu „Microsoft.Expression.Interactions“

XAML: (es geht direkt in den Wurzelknoten)

<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>

Ansichtsmodell:

 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));
        }
    }

Schließlich muss das Ansichtsmodell erbt von "INotifyPropertyChanged"

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top