2010-12-01 9 views
1

Ich habe die Text -Eigenschaft eines TextBox an die Eigenschaft eines Basisobjekts gebunden und es scheint gut zu funktionieren. Leider, wenn ich den Wert der Eigenschaft programmatisch ändere, scheint es nicht auf der GUI zu aktualisieren.WPF - gebundene Steuerung wird nicht aktualisiert, wenn sich die Eigenschaft geändert hat?

Hier ist die Eigenschaft:

public string SealedDate 
{ 
    get 
    { 
     string result = string.Empty; 

     if (_DACase.SealedDate != DateTime.MinValue) 
     { 
      result = Formatting.FormatDate(_DACase.SealedDate); 
     } 

     return result; 
    } 
    set 
    { 
     DateTime theDate = DateTime.MinValue; 

     if (DateTime.TryParse(value, out theDate) 
      && _DACase.SealedDate != theDate) 
     { 
      _DACase.SealedDate = theDate; 
      base.OnChanged(); //fires event so I know the value of the object has changed 
     } 
    } 
} 

Und der Wert dieser Eigenschaft festgelegt wird, wenn eine andere Eigenschaft es gesetzt wird:

public bool IsSealed 
{ 
    get 
    { 
     return _DACase.SealedId > 0 
      || _DACase.SealedDate != DateTime.MinValue; 
    } 
    set 
    { 
     if (value != (_DACase.SealedId > 0 || _DACase.SealedDate != DateTime.MinValue)) 
     { 
      if (value) 
      { 
       this.SealedId = Authentication.CurrentUser.Id; 
       this.SealedDate = Formatting.FormatDate(DateTime.Now); 
      } 
      else 
      { 
       this.SealedId = 0; 
       this.SealedDate = DateTime.MinValue.ToString(); 
      } 
      base.OnChanged(); 
     } 
    } 
} 

Und die XAML des TextBox, die Aktualisierung nicht, wenn Ich denke es sollte:

<TextBox Name="txtSealedDate" Text="{Binding SealedDate}" Grid.Column="5" Grid.Row="3" IsReadOnly="True" /> 
+6

Was macht 'OnChanged'? Könnten Sie bitte seinen Code posten? Implementiert Ihre Klasse 'INotifyPropertyChanged'? WPF hat grundsätzlich zwei Möglichkeiten zu wissen, dass die Eigenschaft geändert wird: entweder muss die Eigenschaft eine 'DependencyProperty' sein (was für Ihren Code nicht der Fall ist), oder die enthaltene Klasse muss' INotifyPropertyChanged' implementieren. – Vlad

+0

OnChanged() löst nur ein Ereignis aus. Nichts Besonderes. Das Ereignis wird dann behandelt, um mich darüber zu informieren, ob meine Speicherschaltfläche aktiviert werden soll oder nicht. Meine Klasse enthält nicht "INotifyPropertyChanged". Ich werde mir das jetzt ansehen. –

+1

'INotifyPropertyChanged' hat es geschafft. Wenn Sie eine Antwort auf meine Frage einreichen möchten, gebe ich Ihnen die Ehre. –

Antwort

1

Vlads Lösung (in den Kommentaren) war korrekt.

Verwandte Themen