我正在尝试将复合集合用作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'对象是什么。
答案 0 :(得分:0)
使用对象类型在View Model中创建一个集合。并添加你的复合集合。然后将List绑定到Items控件项源。
答案 1 :(得分:0)
解决。
事实证明,在viewmodel中:
CompositeCollection CombinedCollection = new CompositeCollection();
与:
不同CombinedCollection = new CompositeCollection();
我使用了后者,它可以正常使用:
ItemsSource="{Binding CombinedCollection}"
菜鸟错误!