У вас есть два подхода, которые я могу придумать не по себе.
Во-первых, как вы предлагаете, поддерживать текущее состояние с помощью списка - этот ключ был в скобках? последний ключ был скобкой? - и обновление на лету.
Другой подход заключается в простой обработке события TextChanged, повторном сканировании текста для шаблона [[text-here]] и обновлении по мере необходимости.
Первый требует больше бухгалтерии, но для более длинного текста будет намного быстрее. Второй подход проще и, вероятно, может быть выполнен с приличным регулярным выражением, но он будет медленнее, когда ваш текст становится длиннее. Если вы знаете, что у вас есть какой-то верхний предел, например, 256 символов, то вы, вероятно, в порядке. Но если вы ожидаете романов, вероятно, не такая уж хорошая идея.