Есть ли кто-нибудь, кто это знает?
Я пробовал это на прошлой неделе, и не повезло.
Теперь я вижу, что однажды можно успешно привязать свойство Button Text, но не его свойство ImageKey:
myButton.Text = "new text"; // really changes the bound data
myButton.ImageKey = "new text"; // does NOT change the bound data
Я использую:
myButton.DataBindings.Add ( new Binding ( "ImageKey", this.MyData, "Name", true, DataSourceUpdateMode.OnPropertyChanged ) );
Почему? Что заставляет Binding тикать/работать? Я просто не понимаю.
EDIT:
ОК, поэтому я определил их для своего собственного производного элемента управления:
public event EventHandler ImageKeyChanged;
protected virtual void OnImageKeyChanged ( EventArgs e )
{
if ( ImageKeyChanged!= null )
{
ImageKeyChanged ( this, e );
}
}
[Bindable ( true )]
public new string ImageKey
{
get
{
return base.ImageKey;
}
set
{
base.ImageKey = value;
this.OnImageKeyChanged ( EventArgs.Empty );
}
}
Он по-прежнему не работает. Есть ли учебник или что-то в сети, которое показывает это. Это просто не работает для меня.
... НЕ изменяет связанные данные
для двусторонней привязки, вам нужны события уведомлений - это может принимать две распространенные формы:
public event EventHandler {name}Changed;
, где {name}
- связанное свойство (ImageKeyChanged
, например)INotifyPropertyChanged
Это, безусловно, работает с привязкой к объекту; Я почти уверен, что обнаружение контроля над объектом очень похоже. Обратите внимание, что есть событие TextChanged
, но не событие ImageKeyChanged
.
Для привязки к работе класс с привязываемым свойством должен предоставлять события изменения (TextChanged
для свойства Text
) или реализовать INotifyPropertyChanged
. Поскольку класс Button
не предоставляет событие ImageKeyChanged
, привязка не может подписаться на получение уведомления об изменении.