2017-03-02 3 views
1

Ich habe viele Fragen dazu gelesen und bis jetzt konnte ich die Antwort auf dieses scheinbar einfache Problem nicht finden.WPF MVVM Abrufen der Textbox-Daten zum ViewModel

Ich habe ein Ansichtsmodell, in dem eine Eigenschaft ist. In meinem XAML habe ich eine TextBox mit einer Bindung an diese Eigenschaft.

Aber die Eigenschaft scheint sich nie zu ändern.

Hier ist das Textfeld ein:

<TextBox Grid.Row="1" 
     Grid.Column="0" 
     Margin="4" 
     Text="{Binding CharNameFromTB}" /> 

Und der entsprechende Code hinter dem Ansichtsmodell:

private String _charNameFromTB; 
String CharNameFromTB 
{ 
    get { return _charNameFromTB; } 

    set 
    { 
     if (!string.Equals(this._charNameFromTB, value)) 
     { 
      this._charNameFromTB = value; 
      RaisePropertyChanged("CharNameFromTB"); 
     } 
    } 
} 

ich einen Haltepunkt auf der if-Anweisung in dem Setter gesetzt habe, aber es löst nicht. Habe ich etwas offensichtlich übersehen? Ich habe versucht, den Binding-Modus auf twoway zu setzen, aber daran änderte sich nichts.

Es macht mich ein bisschen verrückt. Jede Hilfe wäre willkommen!

+1

Try 'Text =„{Binding CharNameFromTB, Update = Property}“' – Tomtom

+0

prüfen In Ihrem Ausgabefenster stürzen Fehler mit Bindings den Code nicht ab, stattdessen geben sie den Fehler an das Ausgabefenster aus. Dies sollte immer Ihre erste Überprüfung sein, ob eine Bindung nicht funktioniert – MikeT

+0

wenn das dem nächsten Port nicht hilft der Aufruf ist, einen Dedge Converter https://www.wpftutorial.net/DebugDataBinding.html – MikeT

Antwort

3

Sie sollten die Eigenschaft public, um in der Lage zu binden, um es:

private String _charNameFromTB; 
public String CharNameFromTB 
{ 
    get { return _charNameFromTB; } 

    set 
    { 
     this._charNameFromTB = value; 
     RaisePropertyChanged("CharNameFromTB"); 
    } 
} 

außerdem sicher, dass Sie die DataContext des TextBox oder eines ihrer Elternelemente auf eine Instanz Ihrer gesetzt haben Zeigen Sie die Modellklasse an, in der die CharNameFromTB-Eigenschaft definiert ist.

Beachten Sie auch, dass die Quelleigenschaft standardmäßig festgelegt ist, wenn der Fokus TextBox verliert.

Wenn Sie die Quelleigenschaft aktualisieren möchten auf jeden Tastendruck sollten Sie die UpdateSourceTrigger Eigenschaft des Binding-PropertyChanged gesetzt:

<TextBox Grid.Row="1" 
     Grid.Column="0" 
     Margin="4" 
     Text="{Binding CharNameFromTB, UpdateSourceTrigger=PropertyChanged}" /> 
+0

Vielen Dank für Ihre Hilfe! – TheFaithfulLearner

Verwandte Themen