gevjen,
Первая проблема, которую я вижу, которая помешает обновлению вашей коллекции, заключается в том, что привязка выполняется только одним способом. Попробуйте что-то вроде этого.
<telerik:GridViewDataColumn Header="Program Name" DataMemberBinding="{Binding Name, Mode=TwoWay}" MinWidth="300"></telerik:GridViewDataColumn>
Теперь вы, вероятно, не будете придумывать какой-либо способ решить, какие записи изменились при сборе сохранения.
Возможно, создайте коллекцию в вашей ViewModel и на вашем наборе каждого из ваших объектов SelectedProgram, вставьте Id в эту коллекцию, а затем выполните цикл по этой коллекции при запуске Save и обновите эти записи.
Это предложения для ObservableCollection. Вам нужно убедиться, что ваши объекты реализуют INPC. Проверьте окно вывода на наличие ошибок привязки данных, если у вас возникли проблемы.