Добавление экземпляра объекта в 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; }
}
Другие вопросы по тегам