Вы работаете с предположением, что отладчик может отслеживать изменения переменных. Не может.
Это возможно с неуправляемым кодом, процессор имеет специальные регистры отладки, которые позволяют устанавливать точки останова данных. Предоставляется до трех. Он генерирует аппаратное прерывание, когда видит, как записывается определенная область памяти. Однако эта очень полезная функция недоступна в управляемом коде. Сборщик мусора совершенно несовместим с ним, он перемещает объекты, давая им другой адрес.
Управляемый отладчик поддерживает условие «когда попадет» на точку останова, что позволяет вам выгружать информацию в окно вывода. Однако для этого требуется точка останова, она не может быть вызвана изменением значения переменной. Это также действительно замедляет выполнение кода, поскольку отладчик фактически переходит в состояние прерывания перед выполнением условия.
Очевидное место для установки такой точки останова - установщик свойства. Это то, что вам нужно для реализации этой функции в коде. Вы можете делать все что угодно в этом установщике, например, используя класс Trace.