Hi @all, wie kann man ein Ereignis im XAML direkt (ohne Codebihind) an das als Resource gebundene ViewModels durchreichen? Wie kann der XAML-Code und der Code im ViewModel aussehen?
Daraus ergibt sich eine weitere Frage: Wie kann man beispielsweise ein StoryBoard aus dem ViewModel steuern? Zustandsänderungen im ViewModel sollen ein StoryBoard starten und das Complete-Ereignis soll Aktivitäten im ViewModel anstoßen.
Hallo Günter, vielen Dank für die Antwort. Ich konnte sie aber leider nicht umsetzen.
In Olafs Lösung starten die Timelines der Storyboards durch Eventtrigger, die die Ereignisbedingungen aus den Eigenschaften von UI-Elementen holen.
Was ich wünsche, ist die Binding von BeginStoryboard an eine Eigenschaft/Ereignis aus einem fremden Objekt (z.B. ViewModel) und auch den umgekehrten Weg, die Übertragung der Endemeldung (myStoryboard.Completed) zum fremden Objekt (ViewModel), ohne extra im Codebehind zu programmieren, so, wie es im MVVM pattern praktiziert wird.
Ich versuche gerade, vom Storyboard zu erben, um eine zusätzliche Eigenschaft (z.B. IsActive) einzubauen, die beim Setzen auf True das Storyboard startet (myStoryboard.Begin) und zm Ende (myStoryboard.Completed) den Eigenschaftswert wieder auf False setzt. Solch eine Eigenschaft könnte man dann direkt an eine Eigenschaft im ViewModel binden. Vielleicht gelingt es mir so, obwohl mir eine direkte Lösung ohne Vererbung lieber wäre.
-- Peter
Ergänzung:
Die Bindung einer Eigenschaft, die bei Veränderung das Storybord startet, habe ich hinbekommen. Die Lösung ist ein DataTrigger (funktionert plötzlich :-). Auch komme ich das Completed-Ereignis des Storyboards mittels Attached Behaviour ran.
Was mir bisher nicht gelungen ist, ist der Zugriff auf das Datenobjekt, also folgendes:
- Eigenschaft aus ViewModel ist an DataTrigger gebunden. - Storyboard ist unter DataTrigger eingebettet. - Completed-Ereignis bringt im Sender in der statischen Methode den Verweis auf das Storyboard-Objekt.
Wie komme ich jetzt in der statischen (Complete)-Methode zum Objektverweis meines ViewModels, um dort wieder auf die an den DataTrigger gebundene Eigenschaft zugreifen zu können? Ich müsste mich also vom Storyboard nach oben bis zum DataTriger bewegen, um dort auf die Property oder auch irgendwo auf den DataContext zuzugreifen.
-- Peter
BearbeitetPeter FleischerSamstag, 6. März 2010 22:06Ergänzung