Implementing CardView (WPF)
A panel control that organizes items as visual cards with built-in grouping, sorting, filtering, and inline editing.
When to Use This Skill
Use this skill when the user needs to:
- Display a collection of data items as cards in a WPF application
- Enable grouping, sorting, or filtering of card items
- Add inline editing to card items (F2 / double-click)
- Customize card header, body, or edit UI via templates
- Bind card items to an
ObservableCollection(MVVM) - Apply themes or localize CardView strings
Note: Grouping, sorting, filtering, and editing requireItemsSourcedata binding. These features do not work with declarativeCardViewItemchildren.
Component Overview
| Class | Namespace | Purpose |
|---|---|---|
CardView | Syncfusion.Windows.Tools.Controls | Container panel for card items |
CardViewItem | Syncfusion.Windows.Tools.Controls | Individual card (declarative use) |
Required Assemblies: Syncfusion.Shared.WPF + Syncfusion.Tools.WPF
XAML Namespace:
xmlns:syncfusion="http://schemas.syncfusion.com/wpf"Documentation and Navigation Guide
Getting Started
📄 Read: references/getting-started.md
- Assembly and namespace setup
- Add CardView via designer, XAML, or C#
- Declarative
CardViewItemapproach ItemsSourcedata binding approachSelectedItem,IsSelected,SelectedItemChangedOrientation(Horizontal / Vertical)- SfSkinManager theme setup
Data Binding & Templates
📄 Read: references/data-binding-and-templates.md
- Full Model + ViewModel +
ObservableCollectionpattern HeaderTemplate— card header displayItemTemplate— card body in view modeEditItemTemplate— card body in edit modeItemContainerStyleandItemContainerStyleSelectorFlowDirectionfor RTL layouts- SfSkinManager visual styles reference
Grouping
📄 Read: references/grouping.md
CanGroupenable/disable- Drag-drop fields to group header
GroupCards(string)programmatic grouping- Nested / multi-level grouping
ShowHeaderto hide the grouping region
Sorting & Filtering
📄 Read: references/sorting-and-filtering.md
CanSortenable/disable; click field name to cycle sort order- Sorting grouped items via drop region
- Filtering via popup-based field value selection (enabled when
ShowHeader="True") - Clear Filter button behavior
ShowHeaderto hide sorting/filtering header
Editing
📄 Read: references/editing.md
CanEditenable/disable (defaultfalse)- F2 / double-click to enter edit mode; Esc/Enter to exit
EditItemTemplaterequirement and patternBeginEdit()/EndEdit()programmatic control- Custom edit UI styling
Localization
📄 Read: references/localization.md
CurrentUICulturesetup- Resource file naming convention
- Name/Value pair configuration
- French culture example
Quick Start Example
Minimal CardView with data binding and grouping/sorting:
<!-- MainWindow.xaml -->
<Window xmlns:syncfusion="http://schemas.syncfusion.com/wpf">
<Window.DataContext>
<local:ViewModel/>
</Window.DataContext>
<syncfusion:CardView ItemsSource="{Binding CardViewItems}"
CanGroup="True"
CanSort="True"
Name="cardView">
<syncfusion:CardView.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding FirstName}"/>
</DataTemplate>
</syncfusion:CardView.HeaderTemplate>
<syncfusion:CardView.ItemTemplate>
<DataTemplate>
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListBoxItem>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Name: " FontWeight="Bold"/>
<TextBlock Text="{Binding FirstName}"/>
</StackPanel>
</ListBoxItem>
<ListBoxItem>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Age: " FontWeight="Bold"/>
<TextBlock Text="{Binding Age}"/>
</StackPanel>
</ListBoxItem>
</ListBox>
</DataTemplate>
</syncfusion:CardView.ItemTemplate>
</syncfusion:CardView>
</Window>// ViewModel.cs
public class ViewModel : NotificationObject
{
private ObservableCollection<Person> _items;
public ObservableCollection<Person> CardViewItems
{
get => _items;
set { _items = value; RaisePropertyChanged(nameof(CardViewItems)); }
}
public ViewModel()
{
CardViewItems = new ObservableCollection<Person>
{
new Person { FirstName = "Alice", LastName = "Smith", Age = 30 },
new Person { FirstName = "Bob", LastName = "Jones", Age = 25 },
new Person { FirstName = "Carol", LastName = "Smith", Age = 28 },
};
}
}Common Patterns
| Scenario | Properties / Methods |
|---|---|
| Enable all interactive modes | CanGroup="True" CanSort="True" CanEdit="True" |
| Programmatic group by field | cardView.GroupCards("LastName") |
| Programmatic edit control | cardView.BeginEdit() / cardView.EndEdit() |
| Hide group/sort/filter header | ShowHeader="False" |
| RTL layout | FlowDirection="RightToLeft" |
| React to selection | Handle SelectedItemChanged event |
| Apply theme | SfSkinManager.SetVisualStyle(cardView, VisualStyles.FluentLight) |
Key Properties
| Property | Type | Default | Description |
|---|---|---|---|
ItemsSource | IEnumerable | null | Data collection to bind |
SelectedItem | object | null | Currently selected card |
Orientation | Orientation | Horizontal | Card layout direction |
CanGroup | bool | false | Enable drag-drop grouping |
CanSort | bool | true | Enable field click sorting |
CanEdit | bool | false | Enable inline editing |
ShowHeader | bool | true | Show/hide group/sort/filter header |
HeaderTemplate | DataTemplate | — | Card header display template |
ItemTemplate | DataTemplate | — | Card body in view mode |
EditItemTemplate | DataTemplate | — | Card body in edit mode |
ItemContainerStyle | Style | — | Style applied to each card container |