ItemListPanel

April 9, 2026 · View on GitHub

A panel that displays a searchable, filterable, multi-selectable list of items with an optional loading overlay, bulk-action toolbar, and pagination footer slot.

Basic usage

<ItemListPanel ItemsSource="{Binding Items}"
              ItemTemplate="{StaticResource ItemTemplate}"
              SearchText="{Binding SearchText, Mode=TwoWay}" />

Properties

PropertyTypeDefaultDescription
IsLoadingboolfalseWhether the loading overlay is shown
LoadingTitlestring"Loading..."Title shown in the loading overlay
LoadingSubtitlestring?Subtitle shown in the loading overlay
IsMultiSelectModeboolfalseWhether multi-select mode is active
SearchTextstring?Search/filter text
SearchWatermarkstring"Search..."Watermark shown in the search box
ItemsSourceIEnumerable?Items source for the list
ItemTemplateIDataTemplate?Data template for list items
SelectedItemobject?Currently selected item
BulkActionsContentobject?Content shown in the bulk-actions bar (visible in multi-select mode)
FooterContentobject?Content shown in the footer slot (e.g. pagination)
EmptyStateTitlestring"No items"Title shown in the empty state
EmptyStateSubtitlestring?Subtitle shown in the empty state
SelectedCountint0Number of selected items in multi-select mode (read-only)

Events

EventDescription
SelectionChangedRaised when the selected item changes
SearchChangedRaised when the search text changes

Methods

MethodDescription
GetSelectedItems()Gets all currently selected items (multi-select mode)
SelectAll()Selects all items
UnselectAll()Clears all selections
ClearSearch()Clears the search text

Loading state

Show a loading overlay while data is being fetched:

<ItemListPanel IsLoading="True"
              LoadingTitle="Loading items..."
              LoadingSubtitle="Please wait" />
itemListPanel.IsLoading = true;
// ... load data ...
itemListPanel.IsLoading = false;

Multi-select mode

Enable multi-select mode to allow selecting multiple items:

<ItemListPanel IsMultiSelectMode="True">
    <ItemListPanel.BulkActionsContent>
        <StackPanel Orientation="Horizontal" Spacing="8">
            <Button Content="Delete" />
            <Button Content="Archive" />
        </StackPanel>
    </ItemListPanel.BulkActionsContent>
</ItemListPanel>
itemListPanel.IsMultiSelectMode = true;
var selectedItems = itemListPanel.GetSelectedItems();
itemListPanel.SelectAll();
itemListPanel.UnselectAll();

Searching and filtering

The panel includes a search box that filters items in real-time:

<ItemListPanel SearchWatermark="Filter items..." />
// Set search text programmatically
itemListPanel.SearchText = "search term";

// Clear search
itemListPanel.ClearSearch();

Empty state

When the list is empty, an empty state is displayed automatically. Customize the title and subtitle:

<ItemListPanel EmptyStateTitle="No results found"
              EmptyStateSubtitle="Try a different search term" />
itemListPanel.EmptyStateTitle = "No results found";
itemListPanel.EmptyStateSubtitle = "Try a different search term";

Add a footer for pagination or other controls:

<ItemListPanel>
    <ItemListPanel.FooterContent>
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="8">
            <Button Content="Previous" />
            <TextBlock Text="Page 1 of 10" />
            <Button Content="Next" />
        </StackPanel>
    </ItemListPanel.FooterContent>
</ItemListPanel>

Selection handling

Handle selection changes:

itemListPanel.SelectionChanged += (sender, e) =>
{
    var selectedItem = itemListPanel.SelectedItem;
    var selectedCount = itemListPanel.SelectedCount;
};