Thank you for your example, this makes debugging a lot easier!
the problem in this case is the way DependencyProperties work - setting a collection as a default value of a dependency property yields unexpected results.
Since a default value (a an object reference will always exist as a value) to the dependency property, this object will be shared, kind of static. So each next instance of the master control will add 2 new TabItems. That can be clearly seen when you debug your project and check the count of the items. With the first instance they are 2, the second 4 and they will get more and more if this could continue.
In essence, the TabControl was trying to add items that were already items of another control.
I would not imagine this is production code, but other good practices include exposing collection properties as interfaces (IList<Somethning>) and using ObservableCollection<Something> (which can be assigned to an IList) when the items are going to be bound as an ItemsSource.
This blog gives more information on the Collection Dependency properties:
To resolve the issue, simply set a local (and therefore unique) value to the property:
= new List<RadTabItem>();
the Telerik team
Check out Telerik Trainer
, the state of the art learning tool for Telerik products.