базовый биндинг с самых попсовых примеров не работает, а вы предлагаете городить какую-то продвинутую систему
тем не менее, спасибо за ценную мысль - убрать из уравнения факт выборки лингом коллекции и заменить на уже существующую коллекцию
элементарный биндинг это
private int _item;
public int Item
{
get => _item;
set
{
if (value == _item) return;
_item = value;
OnPropertyChanged();
}
}
который заработает всегда и в последсвтиве переписывается сеттер переписывается в вызов метода SetValue (как у кого)
а то что у вас, имеет огромный шанс не заработать
с чем оно полноценно и справляется