Я не понимаю, почему вы просто не выставляете свойство, подобное этому, в вашей ViewModel:
ObservableCollection<object> Items
{
get
{
var list = new ObservableCollection<object>(People);
list.Add(Product);
return list;
}
}
, а затем в вашем xaml вы делаете это:
<ListBox x:Name="TheListBox" ItemsSource={Binding Items}>
<ListBox.Resources>
People and Product Data Templates
</ListBox.Resources>
</ListBox>
...
<ContentControl Content={Binding ElementName=TheListBox, Path=SelectedItem }>
<ContentControl.Resources>
Data Templates for showing People and Product details
</ContentControl.Resources>
</ContentControl>
ОБНОВЛЕНИЕ:
Если вам нужно по-другому манипулировать моделью, сделайте следующее:
ObservableCollection<object> _Items
ObservableCollection<object> Items
{
get
{
if (_Items == null)
{
_Items = new ObservableCollection<object>();
_Items.CollectionChanged += EventHandler(Changed);
}
return _Items;
}
set
{
_Items = value;
_Items.CollectionChanged += new CollectionChangedEventHandler(Changed);
}
}
void Changed(object sender,CollectionChangedEventArgs e)
{
foreach(var item in e.NewValues)
{
if (item is Person)
Persons.Add((Person)item);
else if (item is Product)
Products.Add((Product)item);
}
}
Это всего лишь пример.Но если вы измените вышеперечисленное в соответствии со своими потребностями, это может привести к вашей цели