Вы действительно видите e.NewValue как ноль или как пустую коллекцию?
В своем коде вы устанавливаете значение по умолчанию для свойства для экземпляра ObservableCollection (что обычно не следует делать для ссылочных типов - просто используйте null), а затем назначаете другой экземпляр ObservableCollection в конструкторе экземпляра вашего элемента управления, который вызывает измененный обратный вызов. Теперь вы назначаете новую пустую коллекцию, которую вы должны увидеть для e.NewValue.
Если вы хотите получить доступ к элементам, объявленным в XAML, вам нужно подождать, пока они не будут добавлены в коллекцию. Добавление элементов не вызовет срабатывания обработчика изменения свойства, поскольку вы не назначаете новую коллекцию для DP. Вы можете использовать обработчик для другого события, которое происходит позже (например, Loaded)
Loaded += (sender, e) => { DoSomething(TestItems) };
или прикрепите обработчик CollectionChanged к экземпляру e.NewValue, который будет вызываться каждый раз, когда элемент добавляется, удаляется, перемещается и т. Д.
var newValue = e.NewValue as ObservableCollection<ThirdPartyClass>;
newValue.CollectionChanged += (sender, args) => { DoSomething(TestItems); };