使用ViewModel中的ItemsSource对itemscontrol进行分组

时间:2012-07-13 17:02:42

标签: wpf grouping itemscontrol itemssource

我已经定义了ItemsControl:

<ItemsControl Style="{StaticResource SellingDashboardToDosList}" Grid.Row="2" BorderThickness="1" Background="#C7E8F8" HorizontalAlignment="Stretch" ItemsSource="{Binding Path=ToDoList}">
                    <ItemsControl.GroupStyle>
                        <GroupStyle>
                            <GroupStyle.ContainerStyle>
                                <Style TargetType="GroupItem">
                                    <Setter Property="Template">
                                        <Setter.Value>
                                            <ControlTemplate TargetType="GroupItem">
                                                <GroupBox Header="{Binding Path=Model.TodoType}" >
                                                    <ItemsPresenter />
                                                </GroupBox>
                                            </ControlTemplate>
                                        </Setter.Value>
                                    </Setter>
                                </Style>
                            </GroupStyle.ContainerStyle>
                        </GroupStyle>
                    </ItemsControl.GroupStyle>
                </ItemsControl>

ItemsSource是ViewModel中的SynchronisedObservableCollection。但是这个XAML不会产生任何分组。我假设我应该以某种方式指定ItemsSource是可分组的。但是我应该在哪里指定它?

如果我将XmlDataProvider与一些静态数据一起使用,那么我可以在CollectionViewSource元素中执行它,如下例所示:http://cromwellhaus.com/2010/03/grouping-is-crazy-easy-in-wpf/。我试过这样做:

<CollectionViewSource x:Key="CollectionViewSource1" Source="{Binding Path=ToDoList}">
            <CollectionViewSource.GroupDescriptions>
                <PropertyGroupDescription PropertyName="TodoType" />
            </CollectionViewSource.GroupDescriptions>
        </CollectionViewSource>

但后来我收到了运行时绑定错误:

BindingExpression生成的值对目标属性无效。 Value ='System.Windows.Data.ListCollectionView'BindingExpression:Path = ToDoList; DataItem ='ToDosViewModel'(HashCode = 40956219); target元素是'CollectionViewSource'(HashCode = 51380674); target属性为'Source'(类型'Object')

2 个答案:

答案 0 :(得分:1)

  

但后来我得到了一个运行时绑定错误,即ItemsSource的类型无效。

您是否正确引用了它?您需要将其指定为Binding.Source

ItemsSource="{Binding Source={StaticResource CollectionViewSource1}}"

答案 1 :(得分:0)

我在C#中使用了ListCollectionView而不是XAML中的CollectionViewSource。