Доброе время суток, товарищи!
Столкнулся тут с проблемой — необходимо автоматически реагировать на смену свойства Tag у некоторого контрола (туда записывается некоторый объект). Так как контрол не содержит события TagChanged, пришлось что-то придумывать...
Решил использовать механизм DataBinding: связать свойство Tag контрола с каким-то промежуточным объектом, с единственным свойством
object Value;
в сеттере которого можно было бы сделать какие-либо действия...
Написал небольшой класс TagChangedDetector:
public class TagChangedDetector {
private object value;
public object Value {
get {
return value;
}
set {
if(this.value!=value) {
this.value = value;
MessageBox.Show("Changed");
}
}
}
}
Затем добавил биндинг:
TagChangedDetector tcd = new TagChangedDetector();
edit.DataBindings.Add("Tag", tcd, "Value",false,DataSourceUpdateMode.OnPropertyChanged,null);
Запустил, сменил тег у контрола — ноль реакции... Передал фокус контролу, потом другому — и тут выскочил MessageBox!
В общем, путем экспериментов было выяснено, что если не делать лишних телодвижений по передаче-смене фокуса у этого контрола — смена Tag никак не детектируется
Подскажите пожалуйста правильный способ реализации моей задачи или укажите на неточности в моем коде!