将ItemsControl的ItemSource设置为CompositeCollection的语法是什么?

时间:2015-02-26 06:11:02

标签: c# wpf xaml mvvm

我正在尝试将复合集合用作ItemsControl的ItemsSource。然后,ItemsControl应根据复合集合中的对象类型显示不同的控件。

根据这个问题:

How do you bind a CollectionContainer to a collection in a view model?

我看到我不能直接将一个复合集合绑定为ItemsSource,如下所示:

ItemsSource="{Binding CombinedCollection}"

所以我在ItemsControl Resources中创建了复合集合:

<ItemsControl.Resources>
    <CompositeCollection x:Key="cmpcol">
        <CollectionContainer Collection="{Binding TimeSlots}"/>
        <CollectionContainer Collection="{Binding Items}"/>
    </CompositeCollection>
    <DataTemplate DataType="{x:Type tg:TimeSlot}">
        <tgvw:TimeSlotRect/>
    </DataTemplate>
    <DataTemplate DataType="{x:Type tg:Item}">
        <TextBox></TextBox>
    </DataTemplate>         
</ItemsControl.Resources>

我现在如何将复合集合设置为ItemsSource?我似乎无法获得语法。我认为它类似于:

<ItemsControl.ItemsSource>
   <!--Something Here-->
</ItemsControl.ItemsSource>

顺便说一句,这里的答案https://stackoverflow.com/a/5473443/2591770设法直接绑定到viewmodel中的一个集合 - 但我不知道该示例中的'Data'对象是什么。

2 个答案:

答案 0 :(得分:0)

使用对象类型在View Model中创建一个集合。并添加你的复合集合。然后将List绑定到Items控件项源。

答案 1 :(得分:0)

解决。

事实证明,在viewmodel中:

CompositeCollection CombinedCollection = new CompositeCollection();

与:

不同
CombinedCollection = new CompositeCollection();

我使用了后者,它可以正常使用:

ItemsSource="{Binding CombinedCollection}"

菜鸟错误!