Question

I've defined ItemsControl like that:

<ItemsControl Grid.Row="2" Style="{StaticResource SellingDashboardToDosList}"
              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>

The ItemsSource is a SynchronisedObservableCollection<T> in the ViewModel. But this XAML doesn't produce any grouping. I assume that I should specify somehow that ItemsSource is groupable. But where should I specify it?

If I would use an XmlDataProvider with some static data, then I could do it in a CollectionViewSource element like in following example: http://cromwellhaus.com/2010/03/grouping-is-crazy-easy-in-wpf/ (Archived).

I've tried to do it like that:

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

But then I get a runtime binding error:

Value produced by BindingExpression is not valid for target property.; Value='System.Windows.Data.ListCollectionView' BindingExpression:Path=ToDoList; DataItem='ToDosViewModel' (HashCode=40956219); target element is 'CollectionViewSource' (HashCode=51380674); target property is 'Source' (type 'Object');

Was it helpful?

Solution 2

I've used ListCollectionView in C# instead of CollectionViewSource in XAML.

OTHER TIPS

But then I get a runtime binding error that ItemsSource is of invalid type.

Did you reference it correctly? You need to specify it as Binding.Source:

ItemsSource="{Binding Source={StaticResource CollectionViewSource1}}"
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top