2010-07-13 4 views
1

Je joue avec la liaison de données et j'ai remarqué que le format de liaison est appelé deux fois lors du chargement du formulaire dans le code ci-dessous. Je pensais que cela ne se produirait qu'une seule fois lorsque la propriété TextBoxText de la classe de test serait liée à textbox1. Est-ce normal? Si non, alors que puis-je faire pour l'empêcher? Notez que lorsque j'appuie sur button1 et qu'il modifie la propriété TextBoxText de la classe de test, l'événement de format se déclenche une fois comme prévu.Pourquoi l'événement Format de liaison est-il appelé deux fois?

public partial class Form1 : Form 
{ 
    Test _test = new Test(); 
    public Form1() 
    { 
     InitializeComponent(); 
     Binding binding = new Binding("Text", _test, "TextBoxText"); 
     binding.Format += new ConvertEventHandler(Binding_Format); 
     this.textBox1.DataBindings.Add(binding); 
    } 

    private void Binding_Format(object sender, ConvertEventArgs e) 
    {    
     Debug.WriteLine("Format"); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     _test.TextBoxText = "test1"; 
    } 
} 



class Test : INotifyPropertyChanged 
{ 
    private string _text; 

    public string TextBoxText 
    { 
     get { return _text; } 
     set 
     { 
      _text = value; 
      OnPropertyChanged(new PropertyChangedEventArgs("TextBoxText")); 
     } 
    } 

    private void OnPropertyChanged(PropertyChangedEventArgs e) 
    { 
     PropertyChanged(this, e); 
    } 

    #region INotifyPropertyChanged Members 

    public event PropertyChangedEventHandler PropertyChanged; 

    #endregion 

Répondre

1

La réponse simple: "Parce que c'est ainsi que Microsoft l'a implémenté".

Le but est de simplement répondre à l'événement ... chaque fois que cela arrive ... mais cela arrive souvent. Nous ne pouvons pas faire d'hypothèses. Il y a des cas où vous pourriez être appelé six fois sur le même événement.

Nous avons juste à rouler avec elle et continuer à être génial.

Questions connexes