Autor |
Beitrag |
Sestriel
Hält's aus hier
Beiträge: 11
|
Verfasst: Fr 03.07.15 11:36
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
Beiträge: 4785
Erhaltene Danke: 1055
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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
Für diesen Beitrag haben gedankt: Sestriel
|
|
Sestriel
Hält's aus hier
Beiträge: 11
|
Verfasst: 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 Th69: Full-Quote entfernt.
|
|
Ralf Jansen
Beiträge: 4705
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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?
Für diesen Beitrag haben gedankt: Sestriel
|
|
Sestriel
Hält's aus hier
Beiträge: 11
|
Verfasst: 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 { 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 Th69: C#-Tags hinzugefügt
Zuletzt bearbeitet von Sestriel am Fr 03.07.15 13:23, insgesamt 1-mal bearbeitet
|
|
Ralf Jansen
Beiträge: 4705
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Fr 03.07.15 13:16
Zeig zur Sicherheit mal deine RaisePropertyChanged Methode
|
|
Sestriel
Hält's aus hier
Beiträge: 11
|
Verfasst: Fr 03.07.15 13:22
Ralf Jansen hat folgendes geschrieben : | 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
Beiträge: 4705
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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
Hält's aus hier
Beiträge: 11
|
Verfasst: Fr 03.07.15 13:29
Ralf Jansen hat folgendes geschrieben : | 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
|
|