syncfusion-wpf-datapager — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited syncfusion-wpf-datapager (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Guide for implementing the Syncfusion WPF DataPager (SfDataPager) to paginate large datasets in WPF applications. The DataPager control provides navigation buttons, numeric page buttons, and flexible data‑binding options for dividing data into manageable pages.
Use this skill when the user needs to:
SfDataPager is a WPF control that divides data collections into pages and provides navigation UI:
📄 Read: references/getting-started.md
📄 Read: references/data-binding.md
📄 Read: references/appearance.md
📄 Read: references/page-navigation.md
📄 Read: references/styles-templates.md
Basic SfDataPager with SfDataGrid integration:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sfgrid="clr-namespace:Syncfusion.UI.Xaml.Grid;assembly=Syncfusion.SfGrid.WPF"
xmlns:datapager="clr-namespace:Syncfusion.UI.Xaml.Controls.DataPager;assembly=Syncfusion.SfGrid.WPF">
<Window.DataContext>
<local:ViewModel/>
</Window.DataContext>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!-- DataGrid displays paginated data -->
<sfgrid:SfDataGrid AutoGenerateColumns="True"
ItemsSource="{Binding ElementName=sfDataPager, Path=PagedSource}"/>
<!-- DataPager provides navigation -->
<datapager:SfDataPager x:Name="sfDataPager"
Grid.Row="1"
NumericButtonCount="10"
PageSize="10"
Source="{Binding OrdersDetails}"/>
</Grid>
</Window>Key concepts:
OrdersDetails)<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<sfgrid:SfDataGrid ItemsSource="{Binding ElementName=sfDataPager, Path=PagedSource}"/>
<datapager:SfDataPager x:Name="sfDataPager"
Grid.Row="1"
PageSize="20"
Source="{Binding DataCollection}"/>
</Grid><datapager:SfDataPager x:Name="sfDataPager"
AccentBackground="DodgerBlue"
AccentForeground="White"
AutoEllipsisMode="Both"
NumericButtonCount="5"
PageSize="15"
Source="{Binding DataCollection}"/><Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<sfgrid:SfDataGrid ItemsSource="{Binding ElementName=sfDataPager, Path=PagedSource}"/>
<ComboBox Name="pageSizeComboBox"
Grid.Column="1" Grid.Row="1"
SelectedIndex="0"
ItemsSource="{Binding PageSizeOptions}"/>
<datapager:SfDataPager x:Name="sfDataPager"
Grid.Row="1"
PageSize="{Binding SelectedValue, ElementName=pageSizeComboBox}"
Source="{Binding DataCollection}"/>
</Grid><datapager:SfDataPager x:Name="sfDataPager"
UseOnDemandPaging="True"
PageCount="100"
PageSize="20"
OnDemandLoading="OnDemandDataLoading"/>private void OnDemandDataLoading(object sender, OnDemandLoadingEventArgs args)
{
// Load data for current page only
var pageData = dataSource.Skip(args.StartIndex).Take(args.PageSize);
sfDataPager.LoadDynamicItems(args.StartIndex, pageData);
}<datapager:SfDataPager PageIndexChanging="sfDataPager_PageIndexChanging"/>private void sfDataPager_PageIndexChanging(object sender, PageIndexChangingEventArgs e)
{
// Validate or prompt user before page change
if (HasUnsavedChanges())
{
var result = MessageBox.Show("Unsaved changes. Continue?",
"Confirm",
MessageBoxButton.YesNo);
if (result == MessageBoxResult.No)
{
e.Cancel = true; // Cancel page navigation
}
}
}| Property | Type | Description |
|---|---|---|
Source | IEnumerable | Data collection for paging |
PagedSource | PagedCollectionView | Paginated data (bind to ItemsSource) |
PageSize | int | Items per page (default: 0 = all items) |
PageIndex | int | Current page index (0-based) |
PageCount | int | Total number of pages |
NumericButtonCount | int | Number of numeric buttons to display |
AutoEllipsisMode | AutoEllipsisMode | Ellipsis button placement (After, Before, Both, None) |
AccentBackground | Brush | Background color for navigation/selected buttons |
AccentForeground | Brush | Foreground color for selected button |
DisplayMode | PageDisplayMode | Which buttons to show (e.g., FirstLastPreviousNextNumeric) |
Orientation | Orientation | Horizontal or Vertical layout |
UseOnDemandPaging | bool | Enable on-demand data loading |
| Method | Description |
|---|---|
MoveToFirstPage() | Navigate to first page |
MoveToLastPage() | Navigate to last page |
MoveToNextPage() | Navigate to next page |
MoveToPreviousPage() | Navigate to previous page |
MoveToPage(int pageIndex) | Navigate to specific page |
LoadDynamicItems(int startIndex, IEnumerable items) | Load data for on-demand paging |
| Event | Description |
|---|---|
PageIndexChanging | Before page changes (cancelable) |
PageIndexChanged | After page changes |
When user requests DataPager implementation:
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.