Основываясь на отзывах Хайнци и Роберта Россни, я придумал следующее решение, которое работает с ObservableCollection, к которому я могу получить доступ в XAML и коде:
В коде я расширил ObservableCollection, чтобы я мог использовать его в XAML (в XAML 2009 больше не будет необходимости):
public class CatObservableCollection : ObservableCollection<Cat> { }
В XAML в UserControl.Resources я создаю Cats:
<local:Cat x:Key="Tom" Name="Tom"/>
<local:Cat x:Key="Garfield" Name="Garfield"/>
<local:Cat x:Key="Furball" Name="Furball"/>
Коллекции:
<local:CatObservableCollection x:Key="Room1Collection">
<StaticResourceExtension ResourceKey="Tom"/>
<StaticResourceExtension ResourceKey="Garfield"/>
</local:CatObservableCollection>
<local:CatObservableCollection x:Key="Room2Collection">
<StaticResourceExtension ResourceKey="Garfield"/>
<StaticResourceExtension ResourceKey="Furball"/>
</local:CatObservableCollection>
Номера теперь определены следующим образом:
<local:Room x:Name="Room1" Cats="{StaticResource Room1Collection}"/>
<local:Room x:Name="Room2" Cats="{StaticResource Room2Collection}"/>
Room.Cats является наблюдаемой коллекцией