Announcement

Collapse
No announcement yet.

MVVM und Storyboard

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • MVVM und Storyboard

    Abend zusammen,

    ich habe ein Problem mit dem Storyboard. Genauer gesagt möchte ich das Storyboard nicht wieder abspielen, bevor es nicht beendet war. Dafür gibts den EventHandler "Completed". Wie binde ich soetwas an mein ViewModel? Ich finde im Internet keine lösung dafür....

    Danke im Voraus und schönen Abend!!!
    Die Taschenlampe!

    Die perfekte Taschenlampe für Ihr Windows Phone!

    - Die APP steuert die echte Blitz-LED an und versorgt Sie mit 100% Leistung!
    - Zudem zeigt die Live-Kachel den aktuellen Akkustand des Telefons an!


    Hier gehts zu APP!

  • #2
    Hallo Flo_Plus,

    hier könntest du ganz einfach in der Codebehind das Completed-Event abonnieren und dort dann eine Eigenschaft im ViewModel setzen.
    Das verstößt nicht gegen MVVM, denn es heißt ja nirgends dass die Codebehind leer sein muss. Es geht nur um die Trennung der Schichten und diese ist dadurch in keinster Weise beinträchtigt.

    Allerdings sollte das ViewModel von der Animation überhaupt nur etwas wissen, wenn dies Teil der Anwendungslogik ist. Ist die Animation nur ein optischer Aufputz, so sollte mMn das ViewModel davon auch keine Ahnung haben.

    Als Alternative zum oben erwähnten Vorgehen per Codebehind suche mal nach "EventToCommand" - da gibts vieles und hat auch den Vorteil, dass es wiederverwendbar ist.

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Hallo,

      danke erstmal. Das EventToCommand hab ich bereits erfolgreich getestet, außer beim Storyboard. Da kommt ein Thread-Konflikt. Bei anderen Elementen funktionert es.
      Das Problem ist dass das Viewmodel eine Eigenschaft bindet, an welcher das Storyboard hängt.
      Sobald die Variable "START" als Wert hat, fängt die Animation an. Und ich möchte Sie eben "Sauber" beenden wenn und nicht einfach abbrechen lassen wenn sich die Variable ändert usw.
      Das CodeBehind ist ne sehr gute Idee.
      Aber vielleicht hat ja jemand eine Lösung wegen dem Thread-Konflikt?

      Gruß
      Die Taschenlampe!

      Die perfekte Taschenlampe für Ihr Windows Phone!

      - Die APP steuert die echte Blitz-LED an und versorgt Sie mit 100% Leistung!
      - Zudem zeigt die Live-Kachel den aktuellen Akkustand des Telefons an!


      Hier gehts zu APP!

      Comment


      • #4
        Hallo,

        kommt eine Fehlermeldung wegen dem Thread-Konflikt? Kannst du diese posten?


        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Guten Morgen,

          hier mal die Fehlermeldung:

          Failed object initialization (ISupportInitialize.EndInit). Cannot freeze this Storyboard timeline tree for use across threads. Error at object 'System.Windows.Controls.Border' in markup file 'CommandAction;component/views/master.xaml' Line 52 Position 11.

          Das Storyboard befindet sich in einem Border.

          MfG
          Die Taschenlampe!

          Die perfekte Taschenlampe für Ihr Windows Phone!

          - Die APP steuert die echte Blitz-LED an und versorgt Sie mit 100% Leistung!
          - Zudem zeigt die Live-Kachel den aktuellen Akkustand des Telefons an!


          Hier gehts zu APP!

          Comment


          • #6
            Hallo,

            eine Erklärung und Abhilfe für diese Fehler zeigt How to bind to Animation To and FROM properties.

            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              Hey,

              danke, aber der Link bringt mich hierbei nicht weiter. Denn der Fehler kommt erst wenn das Completed-Event mittels EventToCommand gebunden wird. Ohne das gibt es den Fehler nicht.
              Mein Aufbau sieht demnach genau aus wie dein Link.

              Aber trotzdem danke ;-)

              Gruß Flo
              Die Taschenlampe!

              Die perfekte Taschenlampe für Ihr Windows Phone!

              - Die APP steuert die echte Blitz-LED an und versorgt Sie mit 100% Leistung!
              - Zudem zeigt die Live-Kachel den aktuellen Akkustand des Telefons an!


              Hier gehts zu APP!

              Comment


              • #8
                Aber vielleicht löst man das ja anders in MVVM:
                Wie krieg ich es hin das die Animation "NUR" startet, wenn sie vorher beendet war. Ich will also dass alles einmal durchläuft und die Animation erst danach wieder gestartet werden kann, egal wie oft man auf den Button der sie betätigt klickt...

                MfG
                Die Taschenlampe!

                Die perfekte Taschenlampe für Ihr Windows Phone!

                - Die APP steuert die echte Blitz-LED an und versorgt Sie mit 100% Leistung!
                - Zudem zeigt die Live-Kachel den aktuellen Akkustand des Telefons an!


                Hier gehts zu APP!

                Comment


                • #9
                  Hallo,

                  der Start-Button ist per Command-Binding an das VM gebunden. In der entsprechenden View würde ich dann im VM eine Eigenschaft wie IsAnimationRunning auf true setzen. Diese Eigenschaft prüft der Command (mittels CanExecute) und dann wird der Start-Button entsprechend aktiviert/deaktiviert.

                  Dass die View hier auf das VM zugreift stört nicht, denn die View kennt ja das VM. Nur umgekehrt sollte keine Bekanntschaft vorhanden sein.


                  mfG Gü
                  "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                  Comment


                  • #10
                    Hi,

                    soweit ganz klar. Aber "isAnimationRunning". wie soll ich das feststellen? Da liegt mein Problem….

                    Gruß Flo
                    Die Taschenlampe!

                    Die perfekte Taschenlampe für Ihr Windows Phone!

                    - Die APP steuert die echte Blitz-LED an und versorgt Sie mit 100% Leistung!
                    - Zudem zeigt die Live-Kachel den aktuellen Akkustand des Telefons an!


                    Hier gehts zu APP!

                    Comment


                    • #11
                      Hallo,

                      die View weiß das ja alles. Ich hab jetzt nicht parat ob das Storyboard so eine Eigenschaft hat, aber zur Not können auch die Events wie Completed o.ä. vom Storyboard verwendet werden um dort die Eigenschaft im VM zu setzen.

                      mfG Gü
                      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                      Comment

                      Working...
                      X