2010-12-01 8 views
1

J'ai lié la propriété Text d'un TextBox à la propriété d'un objet de base et cela semble fonctionner correctement. Malheureusement, lorsque je modifie la valeur de la propriété par programme, il ne semble pas mettre à jour sur l'interface graphique.WPF - Le contrôle lié n'est pas mis à jour lorsque la propriété a été modifiée?

est ici la propriété:

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 
     } 
    } 
} 

Et la valeur de cette propriété est définie quand une autre propriété étant définie:

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(); 
     } 
    } 
} 

Et le XAML de la zone de texte qui ne soit pas mise à jour lorsque Je pense qu'il devrait:

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

Que fait 'OnChanged'? Pourriez-vous s'il vous plaît poster son code? Est-ce que votre classe implémente 'INotifyPropertyChanged'? WPF a essentiellement 2 façons de savoir que la propriété est modifiée: soit la propriété doit être un DependencyProperty (ce qui n'est pas le cas pour votre code), soit la classe conteneur doit implémenter 'INotifyPropertyChanged'. – Vlad

+0

OnChanged() déclenche uniquement un événement. Rien d'extraordinaire. L'événement est ensuite géré pour me faire savoir si mon bouton de sauvegarde doit être activé ou non. Ma classe n'implémente pas 'INotifyPropertyChanged'. Je vais jeter un coup d'oeil à ça maintenant. –

+1

'INotifyPropertyChanged' a fait l'affaire. Si vous souhaitez répondre à ma question, je vous en créditerai. –

Répondre

1

La solution de Vlad (dans les commentaires) était correcte.

Questions connexes