Laden...

simple Binding Frage (TextBox+TextBox=LabelAusgabe)

Erstellt von distian vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.320 Views
D
distian Themenstarter:in
3 Beiträge seit 2012
vor 11 Jahren
simple Binding Frage (TextBox+TextBox=LabelAusgabe)

Hallo Community!

Hätte mal eine, wahrscheinlich simple, Bindingfrage. 2 Textboxen in welcher ich Werte eingebe (float) und ein Label das mir das Ergebnis ausgeben soll.

Jetzt habe ich folgende xaml:


<Grid>
        <TextBox Text="{Binding Zahl1[0]}" Height="31" HorizontalAlignment="Left" Margin="12,12,0,0" Name="textBox1" VerticalAlignment="Top" Width="118" />
        <TextBox Height="31" HorizontalAlignment="Left" Margin="12,49,0,0" Name="textBox2" Text="{Binding Zahl2[0]}" VerticalAlignment="Top" Width="118" />
        <Label Height="31" HorizontalAlignment="Left" Margin="12,112,0,0" Name="textBox3" Content="{Binding Ergebniss[0], UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Top" Width="118" Background="#FFEFD6D6" />
        <Button Content="Button" Height="27" HorizontalAlignment="Left" Margin="133,268,0,0" Name="button1" VerticalAlignment="Top" Width="257" Click="button1_Click" />
    </Grid>

und meine Klasse:


public class Person : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public Person()
        {

        }

        float[] fZahl1 = new float[2];
        public float[] Zahl1
        {
            get { return fZahl1; }
            set
            {
                fZahl1 = value;
                OnPropertyChanged("Zahl1");
            }
        }

        float[] fZahl2 = new float[2];
        public float[] Zahl2
        {
            get { return fZahl2; }
            set
            {
                fZahl2 = value;
                OnPropertyChanged("Zahl2");
            }
        }

        float[] fErgebniss = new float[2];
        public float[] Ergebniss
        {
            get
            {
                for (int i = 0; i < 2; i++)
                {
                    fErgebniss[i] = fZahl1[i] + fZahl2[i];
                }
                return fErgebniss;
            }
            set
            {
                fErgebniss = value;
                OnPropertyChanged("Ergebniss");
            }
        }


        #region OnPropertyChanged
        //
        //Methode zum aktualiesieren der Werte.
        //
        protected void OnPropertyChanged(string property)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
        #endregion
    }

Warum wird das Label nicht aktualisiert? Über den Button gibt es den richtigen Wert.

Danke schon mal
mfg

PS: Nicht verwirren lassen von der Namensgebung Person hat nix mit Person zu tun. Besser gesagt war zu faul für meine Übungen den Klassennamen zu ändern.

Mir ist schon klar das mein code "abenteuerlich und kurios" aussieht. aber beim Probieren ist doch alles erlaubt 😉
Geht mir nur ums verstehen.

109 Beiträge seit 2011
vor 11 Jahren

Hallo,

sieht ja ziemlich abenteurlich aus dein Übungsbeispiel: Warum verwendest du Arrays in deinem Model wenn du dich eh nur auf ein Element bindest?

Vermutlich wird es aber nicht funktionieren da du zwar sagst das sich eine Zahl geändert hat aber nicht das Ergebnis.


        float[] fZahl1 = new float[2];
         public float[] Zahl1
         {
             get { return fZahl1; }
             set
             {
                 fZahl1 = value;
                 OnPropertyChanged("Zahl1");
                 OnPropertyChanged("Ergebniss[0]");
             }
         }

         float[] fZahl2 = new float[2];
         public float[] Zahl2
         {
             get { return fZahl2; }
             set
             {
                 fZahl2 = value;
                 OnPropertyChanged("Zahl2");
                 OnPropertyChanged("Ergebniss[0]");
             }
         }

könnte Abhilfe schaffen (keine Ahnung wie dein CodeBehind/ViewModel aussieht)

Habs nicht probiert... sieht äußerst kurios aus was du da machst 😃

Edit: nein wird vermutlich doch nicht funktionieren da du ja bei Änderung der Werte der Textboxen nicht im Setter der Liste landest. Kleiner Tip: verwerfe erst mal deine Arrays. Dann sollte das Beispiel funktionieren (wie gesagt: in Abhängigkeit was du im CodeBehind bzw. ViewModel treibst). Später kannst du mit Listen arbeiten (IList<float> !!) und in deiner View z.B. mit einem ItemsControl welches dir Listen darstellen kann. Dein obiges Beispiel macht keinen Sinn...

Um Rekursion zu verstehen, muss man erst mal Rekursion verstehen, muss man erst mal Rekursion verstehen, ....

5.299 Beiträge seit 2008
vor 11 Jahren

eine ObservableCollection statt der Arrays ginge vermutlich.

Der frühe Apfel fängt den Wurm.

M
171 Beiträge seit 2012
vor 11 Jahren

Musst Du nicht den float Wert in einen String konvertieren um ihn an die Label.Content Eigenschaft binden zu können ? Kriegst Du zur Laufzeit einen Binding-Fehler im Output Fenster angezeigt ?

Falls ja suche mal nach IValueConverter und konvertiere deinen float Wert im xaml damit zu einem string.