2010-07-13 2 views
1

데이터 바인딩을 가지고 놀고 있는데 아래 코드에서 폼을로드 할 때 바인딩 포맷이 두 번 호출된다는 것을 알았습니다. 테스트 클래스 TextBoxText 속성이 fist가 textbox1에 바인드되었을 때 한 번만 발생한다고 생각했습니다. 이게 정상인가? 그렇지 않다면, 그것을 막기 위해 무엇을 할 수 있습니까? 참고, button1을 눌러 테스트 클래스의 TextBoxText 속성을 변경하면 형식 이벤트가 예상대로 발생합니다.Binding Format 이벤트가 두 번 호출되는 이유는 무엇입니까?

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 

답변

1

간단한 대답 : "이것이 Microsoft에서 구현 한 방식이기 때문에"입니다.

목표는 이벤트에 응답하는 것입니다. 문제가 발생할 때마다 ...하지만 종종 발생합니다. 우리는 어떤 가정도 할 수 없습니다. 같은 사건에 6 번 불려지는 경우가 있습니다.

우리는 단지 그것으로 굴러 와서 계속 최고입니다.

관련 문제