Entwickler-Ecke

WPF / Silverlight - Binding aktualisieren schlägt fehlt.


Sestriel - Fr 03.07.15 11:36
Titel: Binding aktualisieren schlägt fehlt.
Guten Morgen,

immer noch stehe ich auf Kriegsfuß mit dem DataBinding bzw allgemein XAML & binnicht in der Lage, meinen TextBlock über das Binding zu updaten.

Ich habe also string test = "Hallo"; und

XML-Daten
1:
<TextBlock x:Name="textBlock" HorizontalAlignment="Left" Height="269" Margin="5,5,0,0" TextWrapping="Wrap" Text="{Binding test, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Top" Width="1229"/>                    
als textBlock.

"Hallo" wird in diesem fall auch richtig angezeigt, jedoch wird beim drücken eines Buttons der Inhalt von "test" geändert, was müsste ich an meinem Code ändern, damit mein Textblock geupdated wird?


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
private string _test = "unknown";
public string test
{
    get { return _test; }
    set
    {
        _test = value;
        RaisePropertyChanged(() => test);
    }
}


Th69 - Fr 03.07.15 12:32

Hallo,

wenn du beim Button-Click die Eigenschaft test änderst, dann sollte automatisch der TextBlock aktualisiert werden (dein Binding dazu sieht richtig aus).
Zeig mal deinen Code dazu.

PS: Eigenschaften sollten mit einem Großbuchstaben (wie Methoden) beginnen: Test


Sestriel - Fr 03.07.15 12:53

Welchen Code genau benötigst du ?
Laut dem debugging ist alles richtig, er schreibt in den string auch die richtigen Zeichen, habe ich bereits mit einer MessageBox getestet, lediglich das Binding will nicht updaten.
Mein code, der hier vorhanden ist, ist leicht abgewandelt, da ich von dem Code eigentlich nichts veröffentlichen darf, deshalb auch die Variablennamen.
Mein Code an sich läuft fehlerfrei, lediglich das Binding macht Faxen, wie eigentlich immer..ständig spinnt der XAML-Mist rum.

Moderiert von user profile iconTh69: Full-Quote entfernt.


Ralf Jansen - Fr 03.07.15 13:00

Dann versuchen wir es ein wenig mit manuellem Remote Debugging ;)

- Beim debuggen hast du gesehen das du bei RaisePropertyChanged(() => test) ankommst?
- du hast auch gesehen das der richtige Propertyname "test" in der RaisePropertyChanged Methode ankommt?
- du hast gesehen das der PropertyName auch in den PropertyChangedEventArgs aufgenommen wurde
- du hast gesehen das in der Methode der OnPropertyChanged Event delegat dann auch ausgeführt wird
- du siehst das nach dem Event der getter deiner Property aufgerufen wird?


Sestriel - Fr 03.07.15 13:00


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
        private DelegateCommand _SaveXMLCommand;
        public DelegateCommand SaveXMLCommand
        {
            get
            {
                return _SaveXMLCommand;
            }
        }
        public bool SaveXMLCommand_CanExecute(object argument)
        {
            
            return true;
        }
        private void SaveXMLCommand_Execute(object obj) 
        {
            try
            {
                //...Hier stehen ein paar Zeilen code, sind aber unwichtig.
                test = xel.ToString();
                MessageBox.Show(test);
            }
            catch
            {
                MessageBox.Show("Fehler - ...");
            }
        }

Dies wäre mein Command, was ich auf den Button gelegt habe, hoffe das ist noch ok, dass ich den Code hochgeladen habe.

@Ralf Jansen.

-Ja
-_test=value; wird ausgeführt, in value stehen die Daten, die ich richtigerweise übergeben möchte.
-Hier könnte das Problem evtl. liegen, ich muss aber zugeben, ich bin mir nicht sicher was damit gemeint ist, da ich noch nicht allzuviel Erfahrung mit MVVM bzw allgemein Wpf habe.
-Hier stehe ich ebenfalls leicht auf dem Schlauch.

-Trifft nicht zu, mein get{ return _test } wird nicht ausgeführt bzw angesprochen im debugging. Edit: Wird tatsächlich nicht angesprochen

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Ralf Jansen - Fr 03.07.15 13:16

Zeig zur Sicherheit mal deine RaisePropertyChanged Methode


Sestriel - Fr 03.07.15 13:22

user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Zeig zur Sicherheit mal deine RaisePropertyChanged Methode


Darauf habe ich leider keinen Zugriff, selbst wenn ich könnte dürfte ich nicht, aber mit einer Sicherheit von 99,99% liegt dort nicht der Fehler, da diese Seit 2014 nicht verändert wurde und jeder hier damit arbeitet.

Btw, muss meine Aussage korrigieren, mein getter wird doch nicht aufgerufen, lag an der noch vorhandenen MessageBox.


Ralf Jansen - Fr 03.07.15 13:26

Dann kann ich nur noch Vermutungen anstellen. Bezogen auf dein Problem im letzten Thread. Die test Property befindet sich auch im ViewModel? Und nicht im Model?


Sestriel - Fr 03.07.15 13:29

user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Dann kann ich nur noch Vermutungen anstellen. Bezogen auf dein Problem im letzten Thread. Die test Property befindet sich auch im ViewModel? Und nicht im Model?

Ja, alles was hier abgerufen wird befindet sich in der VM - Ich werde mein Programm mal an einem anderen Rechner laufen lassen, da an diesem allgemein XAML ziemlich "anders" läuft als auf allen anderen Rechnern.

Edit: Fehler nun doch gefunden, jenes Problem war ein gesetzter DataContext in der CodeBehind (Wie auch immer der dahin kam?) Welcher eine neue Instanz der ViewModel erzeugte.

Vielen Dank an alle für die Hilfe :)

MfG