Можно ли как-то со стороны одного экземпляра следить за состоянием другого экземпляра? Например, есть класс A у которого есть свойство P1 и класс B, который должен как-то узнавать обо всех изменениях A.P1. При этом, чтобы сам класс A ничего не подозревал о том, что за ним «наблюдают»?
public class A
{
public string P1
{
get {return this._P1;}
set
{
this._P1 = value;
}
}
private string _P1 = string.Empty;
}
> ... чтобы сам класс A ничего не подозревал о том, что за ним «наблюдают» ...
Если я правильно понимаю, это значит, что в самом классе A ничего не меняется
> ... класс B, который должен как-то узнавать обо всех изменениях A.P1
Это можно сделать:
A a = new A();
PropertyDescriptorCollection pdc = TypeDescriptor.GetProperties(a);
pdc["P1"].AddValueChanged(this.a, new EventHandler(A_ValueChanged));
private void A_ValueChanged(object sender, EventArgs e)
{
MessageBox.Show("sss");
}
Теперь вызываем изменение свойства
a.P1 = "str"; // это не приведет к вызову обработчика.
Для того, чтобы все заработало, свойство A.P1
следует менять след. образом:
PropertyDescriptorCollection pdc = TypeDescriptor.GetProperties(a);
pdc["P1"].SetValue(this.a, "D6");
Кстати, PropertyGrid скорее всего таким способом меняет
значения свойств у объектов:
PropertyGrid p = new PropertyGrid();
p.Parent = this;
p.Dock = DockStyle.Fill;
p.SelectedObject = this.a;
Изменение свойства this.a.P1 из PropertyGrid также
приводит к вызову A_ValueChanged
Комментариев нет:
Отправить комментарий