На основе примера из библиотеки winforms\bltoolkit.Demo сделал свое приложение и обнаружил, что когда
на форме делаю связку через objectbinder со своим компонентом textboxbutton(едитбокс плюс кнопка + внутренне цифровое поле в зависимости от значения которого будет меняться содержимое едитбокса )
Через визуальный дизайнер связываю objectbinder и поле storeid своего компонента. При открытии формы биндинг проходит от objectbinder к моему компоненту, все события обрабатываются, но когда я меняю storeid обратная передача информации в objectbinder не происходит.
Пожалуйста, спасите.Понимаю, что упустил что-то важное, но, вот, что.....
Думал проблема с биндингом на стороне моего компонента, читал мсдн, форумы... вроде сделал все как там рекомендовали, а биндинг все равно не срабатывает.
Заранее спасибо за помощь.
public abstract class ВидыРабот : БазоваяСущность
{
[MaxLength(100), Required]
public abstract string Наименование { get; set; }
public abstract int КлючВалюты { get; set; }
public abstract float БазовыйТариф { get; set; }
}
public abstract class БазоваяСущность : EditableObject
{
[PrimaryKey(0), NonUpdatable]
public abstract int Ключ { get; protected internal set; }
[MaxLength(100)]
public abstract string Комментарий { get; set; }
public virtual БазоваяСущность CopyTo(БазоваяСущность obj)
{
Map.ObjectToObject(this, obj);
return obj;
}
public virtual БазоваяСущность Clone()
{
БазоваяСущность obj = (БазоваяСущность)TypeAccessor.CreateInstanceEx(GetType());
CopyTo(obj);
obj.AcceptChanges();
return obj;
}
}
//===========================================================================
public partial class TextBoxButton : UserControl, INotifyPropertyChanged
{
private int _StoreID;
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
[Browsable(true)]
public override string Text
{
get
{
return полеВвода.Text;
}
set
{
полеВвода.Text = value;
}
}
[Browsable(true),Bindable(true),DefaultValue(-1)]
public int StoredID
{
get
{
return _StoreID;
}
set
{
_StoreID = value;
NotifyPropertyChanged("StoredID");
}
}
}
В дополнении для тестирования сделал еще одно поле текстбокс и для него задал связь.
В дизайнере Получилось две связки:
textboxtutton.storeid (int) ---> objectbinder.КлючВалюта (int)
objectbinder.КлючВалюта (int) ---> textbox.text (string)
Попробовал.
Меняю первый раз (storeid=1).
textboxbutton.storeid=1
objectbinder.Object.КлючВалюта=0
textbox.text="0"
Меняю второй раз (storeid=2).
textboxbutton.storeid=2
objectbinder.Object.КлючВалюта=1
textbox.text="1"
Спасите кто-нибудь....
Вопрос снялся. Если кому пригодиться привожу решение.
В случае когда контрол самописный и связка устанавливается через дизайнер, то студия устанавливает
режим обновления данных по событию onvalidate, и как в моем случае когда я в своем компоненте
реализовал только INotifyChange с onpropertcange было не достаточно. Соответственно, чтобы
все завертелось в окне свойств databingind-advanced устанавливаем параметр обновления нашей связки по onpropertycange
З.Ы.Ж. И самое интересное в доступной документации об этой тонкости не сказано. Абыдно, да....