2013-07-17 2 views
1

Есть ли способ добавить один элемент в CompositeCollection (используемый как источник для ComboBox) в дополнение к другим подкатегориям?Добавление экземпляра объекта в CompositeCollection как элемент

  • Объект экземпляра элемента является собственности на
  • Оба добавленного элемента и элементов в других суб-коллекции 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> 

EDIT: Это несколько работал с

<ObjectDataProvider ObjectInstance="{x:Static local:MyViewModel.AnotherItem}"/> 

Но, (1) это требует статическое свойство, и (2) в прилагаемой команде (не показано здесь для краткости), тип выбранного элемента, который возвращается, - ObjectDataProvider, а не тип MyViewModel.AnotherItem, что вызывает некоторую боль в ViewModel

+0

Вместо того, чтобы работать вокруг этого вопроса таким образом, вы не думаете, что было бы проще просто обернуть 'AnotherItem' в' 'IEnumerable', что CollectionContainer' может связываться как «Коллекция»? Таким образом, два упомянутых вами вопроса больше не существуют, поскольку ваше свойство больше не должно быть статическим, а также «DataType» будет иметь правильный пользовательский тип T. Что касается 'CompositeCollection' и' CollectionContainer', ve дал им новый «Список», когда на самом деле у вас только 1 элемент в этом списке ('AnotherItem') => нет функций hiccups – Viv

+0

@Viv, я сделал это, чтобы разблокировать себя из этой проблемы. –

ответ

0

Переместите композитную коллекцию в свой видModel и добавьте все разные коллекции, используя Add method в коде позади.

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; } 
}