Hallo zusammen,
ich komme gerade mit WPF nicht weiter.
Ich habe eine Anwendung, die Daten von einem Server in Realtime bezieht.
In der GUI habe ich ein Preisfeld (TextBox), das ständig aktualisiert wird. (Vergleichbar mit Börsenkursen)
Das Preisfeld soll bei jeder Änderung ein kurzes "Flashlight" bekommen, je nachdem ob der Preis gefallen oder gestiegen ist.
Später sollen auch noch andere TextBoxen so animiert werden.
Ich habe nun das Problem, dass ich absolut nicht weiß wie ich das mache.
Wie stelle ich das am besten an?
Mit einem DataTrigger auf der jeweiligen TextBox und im ViewModel dann zusätzliche Properties wie (PriceUp, PriceDown), die dann an den Trigger gebunden werden?
Oder eventuell mit einem IValueConverter, so dass ich keine neuen Properties ins ViewModel einfügen muss?
Für Tips bin ich sehr dankbar.
Gruß
daTom
Background an Color/Brush Property im Viewmodel binden.
Property aktualisieren wenn du im VM merkst das ne Preisänderung stattgefunden hat.
Wenn das nur ein Flashlight sein soll, kannst du ja einfach nach x sekunden wieder auf orig zustand zurücksetzen, da gibts genug Möglichkeiten.
Andere Ansätze hast du ja auch genannt, also denke ich nicht das du überhaupt keine Ahnung hast wie das zu lösen ist.
Hi,
danke für den Tip.
ich beschäftige mich seit ein paar Tagen erst wieder mit WPF, von daher ist das genannte nur das Ergebnis meiner Recherchen.
Es kann sein, dass ich mich noch mal melden muss 😃
Ich finde den ValueConverter sehr sympatisch. Ausprobiert habe ich den auch schon.
Das Problem ist nur, dass ich da nur den aktuellen Wert in der Convert-Methode bekomme.
Von daher denke ich mal, dass ich den vergessen kann?
Ich habe das ganze jetzt mal versucht, leider wird die Textbox nur ein mal animiert. Danach passiert nichts mehr, der Wert ändert sich dafür aber immer weiter.
Hier der Auszug aus der XAML:
<TextBox HorizontalAlignment="Left" Height="23" Margin="10,178,0,0" TextWrapping="Wrap" Text="{Binding price}" VerticalAlignment="Top" Width="120" x:Name="ChangeField">
<TextBox.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding price, Converter={StaticResource formatter}}" Value="positive">
<DataTrigger.EnterActions>
<StopStoryboard BeginStoryboardName="pos"></StopStoryboard>
<BeginStoryboard x:Name="pos">
<Storyboard>
<ColorAnimation AutoReverse="True" To="Green" Duration="0:0:0:0.100" Storyboard.TargetProperty="(TextBox.Background).(SolidColorBrush.Color)"></ColorAnimation>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="pos"></RemoveStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
hmm, Wird der Converter denn bei jeder Änderung der "price"-Property durchlaufen?
MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden!
*"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht."
*"Ignorance simplifies ANY problem."
*"Stoppt die Piraterie der Musikindustrie"
Hi,
ja wird er. Ich habe aber herausgefunden woran es liegt.
Ich möchte ja, dass bei jeder Preisänderung die Animation gestartet wird.
Der DataTrigger wird wird aber bei einem vorherigen "positive" Ereignis nicht noch mal getriggert, wenn der Converter wieder "positive" liefert.
Ich habe das ganze jetzt mit einem EventTrigger gelöst. Da funktioniert das wunderbar.