The AccordionControl includes support for ICollectionViews – allowing you to manipulate the current record, and define rules for filtering, sorting and grouping.
If the AllowCollectionView property is set to false and an ICollectionView is used as a data source, the AccordionControl transforms the ICollectionView to a plain list, internally. In this instance, rules defined for filtering, grouping and sorting in the ICollectionView are ignored.

Example
This example demonstrates how to bind the AccordionControl (see AccordionControl) to a collection view and synchronize the selected item with the collection view.
View:
Xaml |
<Window x:Class="CollectionViewSample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
xmlns:dxa="http://schemas.devexpress.com/winfx/2008/xaml/accordion"
xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm"
xmlns:componentModel="clr-namespace:System.ComponentModel;assembly=WindowsBase"
dx:ThemeManager.Theme="Office2019Colorful"
xmlns:local="clr-namespace:CollectionViewSample"
DataContext="{dxmvvm:ViewModelSource local:ViewModel}"
Title="Products" Height="450" Width="500">
<Window.Resources>
<CollectionViewSource Source="{Binding Products}" x:Key="Products" >
<CollectionViewSource.SortDescriptions>
<componentModel:SortDescription PropertyName="ProductName" Direction="Ascending"/>
</CollectionViewSource.SortDescriptions>
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Category"/>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</Window.Resources>
<Grid Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<dxe:ListBoxEdit ItemsSource="{Binding Source={StaticResource Products}}"
DisplayMember="ProductName"
AllowCollectionView="True" IsSynchronizedWithCurrentItem="True">
<dxe:ListBoxEdit.GroupStyle>
<x:Static Member="GroupStyle.Default"/>
</dxe:ListBoxEdit.GroupStyle>
</dxe:ListBoxEdit>
<dxa:AccordionControl Grid.Column="1" ItemsSource="{Binding Source={StaticResource Products}}"
AutoExpandAllItems="True" ChildrenPath="Items"
AllowCollectionView="True" IsSynchronizedWithCurrentItem="True" ShowSearchControl="True">
<dxa:AccordionControl.ItemContainerStyle>
<Style TargetType="dxa:AccordionItem">
<Style.Triggers>
<Trigger Property="ItemLevel" Value="1">
<Setter Property="Header" Value="{Binding ProductName}"/>
</Trigger>
</Style.Triggers>
</Style>
</dxa:AccordionControl.ItemContainerStyle>
</dxa:AccordionControl>
</Grid>
</Window>
|
View Model:
C# |
using System.Collections.Generic;
using System.Collections.ObjectModel;
namespace CollectionViewSample {
public class ViewModel {
public virtual ReadOnlyCollection<Product> Products { get; set; }
public ViewModel() {
Products = new ReadOnlyCollection<Product>(CreateProducts());
}
List<Product> CreateProducts() {
var result = new List<Product> {
new Product("Queso Manchego La Pastora", "Cheeses"),
new Product("Gorgonzola Telino", "Cheeses"),
new Product("Chai", "Beverages"),
new Product("Outback Lager", "Beverages"),
new Product("Mozzarella di Giovannia", "Cheeses"),
new Product("Geitost", "Cheeses"),
new Product("Chartreuse verte", "Beverages"),
new Product("Ipoh Coffee", "Beverages")
};
return result;
}
}
public class Product {
public Product(string productName, string category) {
ProductName = productName;
Category = category;
}
public string ProductName { get; set; }
public string Category { get; set; }
public override string ToString() {
return ProductName;
}
}
}
|
VB |
Imports System.Collections.Generic
Imports System.Collections.ObjectModel
Namespace CollectionViewSample
Public Class ViewModel
Public Overridable Property Products As ReadOnlyCollection(Of Product)
Public Sub New()
Products = New ReadOnlyCollection(Of Product)(CreateProducts())
End Sub
Private Function CreateProducts() As List(Of Product)
Dim result = New List(Of Product) From {
New Product("Queso Manchego La Pastora", "Cheeses"),
New Product("Gorgonzola Telino", "Cheeses"),
New Product("Chai", "Beverages"),
New Product("Outback Lager", "Beverages"),
New Product("Mozzarella di Giovannia", "Cheeses"),
New Product("Geitost", "Cheeses"),
New Product("Chartreuse verte", "Beverages"),
New Product("Ipoh Coffee", "Beverages")
}
Return result
End Function
End Class
Public Class Product
Public Sub New(ByVal productName As String, ByVal category As String)
ProductName = productName
Category = category
End Sub
Public Property ProductName As String
Public Property Category As String
Public Overrides Function ToString() As String
Return ProductName
End Function
End Class
End Namespace
|