Announcement

Collapse
No announcement yet.

Properties get set

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

  • Properties get set

    Hallo,

    spricht gundsätzlich etwas dagegen in einer Propertie eine VOID aufzurufen?

    Code:
    pubic string Test
    {
    get { return test; }
    set 
    {
    test = value;
    RufeVoidAuf();
    }
    }
    Die RufeVoidAuf arbeitet anschließend mit dem Wert des Strings Test weiter.

    MfG, 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!

  • #2
    Funktional ist das ok. Aber bedenke ...

    Von einer Property erwartet ein Programmierer das die Zuweisung schnell geht. Wenn deine Methode also eher aufwendiger ist und dauert solltest du daraus eher eine Methode machen um dem programmierenden Benutzer deiner Klasse das besser zu signalisieren.

    Auch solltest du überlegen ob die Reihenfolge im Setter richtig ist. Falls RufeVoidAuf() eine Exception wirft ist das Feld hinter der Property geändert. Ein Aufrufer der Property der eine Exception bei der Zuweisung erhält würde nicht damit rechnen das die Property geändert ist. Mal abgesehen davon das deine Klasse in dem Fall (Property geändert Methode nicht gelaufen bzw. unvollständig gelaufen) dann möglicherweise inkonsistent ist.

    Comment


    • #3
      Ok, danke erstmal.

      Der String ist normal eine abgespeckte EF-Modelklasse, welche SelectedItem heißt. Dann habe ich noch eine die AktProdukt heißt, welche die volle EF-Klasse spiegelt. Sobald sich SelectedItem ändert, soll AktProdukt auch neu gesetzt werden.

      SelectedItem besitzt nur Bezeichnung und ID, AktProdukt hat alle Felder.

      Meine Void sucht in der Datenbank nach der ID und übergibt das gefundene AktProdukt, woran die View sich bindet.
      Wie kann ich das lösen, dass sobald SelectedItem geändert wird, AktProdukt sich auch aktualisiert?

      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


      • #4
        Hallo,

        aus der Model-Klasse ist unbedingt ein DB-Zugriff rauszuhalten, wegen der Trennung der Anliegen (SoC) und der Zuständigkeiten (SRP).

        Das gehört also ins ViewModel (ich nehme an, es ist das gleiche Projekt). Dort rufst du im Setter sowie ein OnPropertyChanged auf um für INotifyPropertyChanged das Ereignis zu feuern. In der OnPropertyChanged-Methode kannst du dann die Methode für das Suchen in der DB aufrufen. Das Suchen sollte dabei unbedingt asynchron erfolgen. Vorzugsweise per Task und in einer Continuation davon setzt du die AktProdukt-Eigenschaft. (diese feuert auch PropertyChanged und die View bekommt das mit und aktualisiert sich).

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

        Comment


        • #5
          Code:
             protected virtual void OnPropertyChanged(string propertyName)
                  {
                      PropertyChangedEventHandler handler = this.PropertyChanged;
                      if (handler != null)
                      {
                          var e = new PropertyChangedEventArgs(propertyName);
                          handler(this, e);
                      }
                  }
          Innerhalb dieser Methode meinst du? Per if den propertyNamen abfragen und wenn SelectedItem dann AktProdukt ebenfalls ändern. Verstehe ich das richtig?

          P.S. War vorhin unglücklich ausgedrückt. habe diese Bindungen natürlich im ViewModel, nicht im Model!

          _____________________
          Ich habe es jetzt über EventToCommand gelöst. Das SelectionChanged feuert ein Command, welches dann meine Void aufruft. Das wäre doch auch eine gute Lösung, oder?


          Gruß und danke!
          Zuletzt editiert von Flo_Plus; 24.05.2012, 16:21.
          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,

            Ich habe es jetzt über EventToCommand gelöst
            EventToCommand ist für View-Ereignis zu VM-Command. Wenns rein VM-intern ist, so würde ich das nicht so umbiegen.

            Innerhalb dieser Methode meinst du? Per if den propertyNamen abfragen und wenn SelectedItem dann AktProdukt ebenfalls ändern. Verstehe ich das richtig?
            Ja so. Allerdings gibt es dafür statt dem if eine elegantere Lösung. Siehe hierzu wpf - Change Notification in MVVM Hierarchies - ich verwende einen ähnlichen Ansatz wie mit dem DepensOn-Attribut.


            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