ContextBound объект. Если вы создаете класс, расширяющий объект, связанный с контекстом, и создаете атрибут ContextAttribute, вы можете перехватывать вызовы, сделанные к такому свойству, и устанавливать IsDirty. .NET создаст прокси для вашего класса, поэтому все вызовы будут проходить через нечто вроде удаленного приемника.
Проблема такого подхода в том, что ваш прокси будет вызываться только при внешнем вызове. Я приведу вам пример.
class A
{
[Foo]
public int Property1{get; set;}
public int Property2{get {return variable;} set{ Property1 = value; variable = value; }
}
Когда property1 вызывается из другого класса, ваш прокси будет вызываться. Но если другой класс вызывает property2, даже если набор property2 вызовет property1, прокси не будет вызван (прокси не нужен, когда вы находитесь в самом классе).
Существует много примеров кода использования ContextBoundObjects, посмотрите на него.