Почему Winforms.Button.Text работает для DataBinding, но не для ImageKey? - PullRequest
2 голосов
/ 28 октября 2009

Кто-нибудь знает это?

Я пробовал это на прошлой неделе, и не повезло.

Теперь я вижу, что однажды можно успешно привязать свойство 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 ) );

Почему? Что делает привязку галочкой / работой? Я просто не понимаю.

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 );
    }
}

Это все еще не работает. Есть ли учебник или что-то в сети, что показывает это. Это просто не работает для меня.

Ответы [ 2 ]

3 голосов
/ 28 октября 2009

... НЕ изменяет связанные данные

для двухсторонней привязки вам нужны события уведомлений - это может принимать две распространенные формы:

  • a public event EventHandler {name}Changed;, где {name} является связанным свойством (например, ImageKeyChanged)
  • объект может реализовать INotifyPropertyChanged

Именно так работает привязка объекта к элементу управления; Я уверен, что обнаружение управления объектом очень похоже. Обратите внимание, что есть событие TextChanged, но нет события ImageKeyChanged.

2 голосов
/ 28 октября 2009

Чтобы сработали привязки, класс с привязываемым свойством должен предоставить события изменения (например, TextChanged для свойства Text) или реализовать INotifyPropertyChanged. Поскольку класс Button не предоставляет событие ImageKeyChanged, привязка не может подписаться на уведомление об изменении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...