2010-08-29 6 views
1

J'ai une zone de texte dont la propriété Text est lié commeTextBox - propriété de liaison ne se rafraîchissez pas

<TextBox Name="txtBox"> 
     <TextBox.Text> 
      <Binding Path="Data"> 

      </Binding> 
     </TextBox.Text> 
    </TextBox> 

Les données déposées peut être modifiée dans divers endroits dans mon programme. Toutefois, si je modifie les données classées dans un contrôle ahother, la propriété t txtBox Text ne s'actualise pas elle-même. Je peux toujours voir l'ancienne valeur (malgré le fait que les données ont été modifiées). Existe-t-il un moyen de forcer TextBox à actualiser son code ou sth?

Répondre

0

Votre objet propriétaire de propriété de données met-il en œuvre INotifyPropertyChanged? si non implémenter et fire PropertyChanged Lorsque votre propriété set est appelée

5

Pour que votre zone de texte sache quand les données qu'elle doit changer, la classe à laquelle elle est liée doit implémenter INotifyPropertyChanged. Voici un exemple en C#. Si vous liez une zone de texte à la propriété Données, la zone de texte doit être mise à jour lorsque l'accesseur de la propriété Data est exécuté. Notez que INotifyPropertyChanged nécessitera une référence à l'espace de noms System.ComponentModel (une utilisation en C# ou importations en VB).

public class MyData : INotifyPropertyChanged 
{ 
    string _data; 

    public event PropertyChangedEventHandler PropertyChanged; 

    public void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    public string Data 
    { 
     get 
     { 
      return _data; 
     } 

     set 
     { 
      _data = value; 
      this.OnPropertyChanged("Data"); 
     } 
    } 
} 
+0

Merci pour votre réponse. Je vais lui donner une chance :) Cependant, je voudrais savoir s'il existe un moyen de rafraîchir textbox.text properryy manuellement. Sth comme textbox.refresh() ?? – pelicano

+0

Encore une question. Est-il possible d'implémenter cette interface et d'utiliser l'autoproperty? Fondamentalement, toutes les propriétés de ma classe sont implémentées de cette façon public DateTime Date {get; ensemble; } – pelicano

+0

En ce qui concerne l'actualisation manuelle, cela dépend si vous voulez le faire en accédant directement au contrôle à partir de la vue ou indirectement à partir du viewmodel. L'exemple fourni indirectement provoque la mise à jour de la liaison à partir du viewmodel. Cela revient donc à chaque fois que vous déclenchez l'événement OnPropertyChanged. Vous pouvez augmenter l'événement quand vous le voulez - il ne doit pas nécessairement être dans le setter. –

Questions connexes