Здравствуйте, 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;
}
}
какие мысли у уважаемой общественности по поводу этого безобразия ?

...