Резюме для программиста
1) надо сделать так, чтобы при эскейпе данные не обновлялись.
2) надо убедиться, что только открыто для редактирования не больше одной ячейки.
Возможно есть что-то еще.
Попробуй реализовать свою идею.
1. Байндинг можно настроить через UpdateSourceTrigger на любое изменение текста или только на полное редактирование. При полном редактировании (ваш эскейп, или потеря фокуса у меня, или нажатие энтер) идёт обновление байндинга. При эскейпе, как я понял, сохраняется старое значение, поэтому обновление модели не требуется. Так и не обновляйте её. В сеттере вью модели проверяете, изменилось ли значение, или осталось прежним, и соответственно принимаете решение об обновлении модели.
Если вы не хотите обновлять именно вью модель, то это лишнее непонятное требование. Но и это можно достигнуть. Просто логика сравнения нового и старого значения должна быть до вью модели. Так можно делать через конвертеры, например. Но это скорее костыль, а правильно - проверять во вью модели. Если во вью модели изменилось, но изменения в модель не ушли, то и в БД или откуда там вы данные брали тоже не уйдут. Это правильный подход при разработке многослойных приложений.
2. Так и делайте привязку свойств вью модели к отдельным текст боксам - будет по одной ячейке (свойству) за раз редактироваться.
Извините, реализовывать нет желания. )) По вашим описаниям идея банальная и для WPF точно не должна представлять трудностей. Или вы не все условия сказали. Ну и всегда есть вариант, что клиенту хочется слишком много странного, которое ему явно не нужно. Иногда бывает проще убедить клиента, что такая-то блаж реально ему не нужна, чем пытаться костылить это в своём фреймворке. Например, расспросить клиента про сценарии использования, и откуда эта блаж взялась. Может, он привык в какой-то другой программе к какому-то подходу, а там это тоже костыль был. И в вашем фреймворке вы, может быть, от этого костыля можете избавить как вашего клиента, так и себя.