Re[2]: биндинг перечитывает все свойства
От: saneman1  
Дата: 05.02.10 11:17
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Это очень странно. Если свойство в объекте-данных изменяется из контрола, то на событие вообще не должно быть реакции, не то, что уж поголовная перечитка свойств.


и тем не менее это так

MK>К сожалению, мало чем могу помочь, потому что много загадочного. Сможешь привести маленький пример?


вот, с коментариями (для проверки можно скопипастить в код формы на которой есть два текстбокса: textBox1 и textBox2) :

  public partial class Form1 : Form
  {
    private BindingSource bindingSource1 = new BindingSource();
    private TestDataObject test1 = null;

    public Form1()
    {
      InitializeComponent();
      test1 = new TestDataObject { Prop1 = 1, Prop2 = 2 };
      Bind(); //после этого текстбоксы как и ожидалось корректно показывают данные, 1 и 2 соответственно
    }

    private void Bind()
    {
      bindingSource1.DataSource = test1;
      textBox1.DataBindings.Add("Text", bindingSource1, "Prop1", true);
      textBox2.DataBindings.Add("Text", bindingSource1, "Prop2", true);
    }

    class TestDataObject : INotifyPropertyChanged
    {
      private int? _prop1;
      public int? Prop1
      {
        get { return _prop1; }
        set
        {
          //когда из текстбокс1 присваивается сюда "магическое" число 5,
          // ( после перехода с него табом на другой контрол ( не текстбокс2) 
          // то текстбокс2 сразу же отображает 6 (хотя свойство2 не менялось и события об его изменении не было)
          // как  показало хождение под отладкой, после генерации события об изменении свойства1, мы попадаем в
          // получение заначения свойства2 ?????
          if (value == 5)
            _prop2 = 6;


          //когда из текстбокс1 присваивается сюда "магическое" число 6,
          // ( после перехода с него табом на другой контрол ( не текстбокс2) 
          // то текстбокс1 не отображает реально присвоенное значение 7 (хотя событие об его изменении сгенерилось)
          // как  показало хождение под отладкой, после генерации события об изменении свойства1, мы Не попадаем в
          // получение заначения свойства1 ????
          if (value == 6)
            value = 7;

          _prop1 = value;
          FirePropertyChanged("Prop1");
        }
      }

      int? _prop2;
      public int? Prop2
      { 
        get { return _prop2; }
        set 
        {
          _prop2 = value;
          FirePropertyChanged("Prop2");
        }
      }

      void FirePropertyChanged(string propName)
      {
        if (PropertyChanged != null)
          PropertyChanged(this, new PropertyChangedEventArgs(propName));
      }

      public event PropertyChangedEventHandler PropertyChanged; 
    }
  }



какие мысли у уважаемой общественности по поводу этого безобразия ? ...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.