Добавление экземпляра объекта в CompositeCollection как элемент
Есть ли способ добавить один элемент в CompositeCollection (используемый в качестве источника для ComboBox) в дополнение к другим вложенным коллекциям?
- Экземпляр объекта элемента - это свойство в ViewModel
- И добавленный элемент, и элементы в других вложенных коллекциях относятся к одному типу.
Вот что у меня есть:
<ComboBox x:Name="combo">
<ComboBox.Resources>
<CollectionViewSource x:Key="CollectionAsAProperty" Source="{Binding CollectionA, Mode=TwoWay}" SelectedItem="{Binding CurrentItem}" />
</ComboBox.Resources>
<ComboBox.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{Binding Source={x:Static local:MyViewModel.StaticCollection}}" />
<CollectionContainer Collection="{Binding Source={StaticResource CollectionAsAProperty}}"/>
===> what should I add here to add another item of DataContext.AnotherItem
</CompositeCollection>
</ComboBox.ItemsSource>
<ComboBox.ItemTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
РЕДАКТИРОВАТЬ: Это работало с
<ObjectDataProvider ObjectInstance="{x:Static local:MyViewModel.AnotherItem}"/>
Но, (1) это требует статического свойства, и (2) в прикрепленной команде (для краткости не показано здесь) тип выбранного элемента, который возвращается ObjectDataProvider
не тип MyViewModel.AnotherItem
, что вызывает некоторую боль в ViewModel
1 ответ
Переместите составную коллекцию в вашу viewModel и добавьте все отличающиеся коллекции, используя метод Add в коде позади.
var myAnimals = new List<Animal>() { new Animal() { Name = "Zebra" },
new Animal() { Name = "Cobra" }} ;
var myPeople = new List<Person>() { new Person() { Name = "Snake Pliskin" },
new Person() { Name = "OmegaMan" }};
var FavoriteThings = new CompositeCollection();
FavoriteThings.Add(myAnimals);
FavoriteThings.Add(myPeople);
public class Animal
{
public string Name { get; set; }
}
public class Person
{
public string Name { get; set; }
}