WPF实现列表分页控件的示例代码,包含总页数,上一页,下一页等
时间: 2023-08-27 07:18:05 浏览: 56
以下是一个简单的 WPF 分页控件示例代码,包含总页数、上一页和下一页等功能:
```xaml
<UserControl x:Class="WpfApp1.CustomPaginateControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Button Content="Prev" Command="{Binding PrevCommand}" Margin="5"/>
<TextBlock Text="{Binding CurrentPage}" Margin="5"/>
<TextBlock Text="/" Margin="5"/>
<TextBlock Text="{Binding TotalPages}" Margin="5"/>
<Button Content="Next" Command="{Binding NextCommand}" Margin="5"/>
</StackPanel>
</Grid>
</UserControl>
```
在代码中,我们使用了一个 `StackPanel` 来布局分页控件的上一页、下一页、当前页和总页数,使用了绑定来绑定按钮的命令和文本块的值。
接下来,我们需要为分页控件添加一个视图模型类,该视图模型类实现了两个命令:`PrevCommand` 和 `NextCommand`,这两个命令可以使我们在列表中向前或向后翻页。
```csharp
public class PaginateViewModel : INotifyPropertyChanged
{
private int _currentPage = 1;
private int _totalPages = 1;
public PaginateViewModel(int totalPages)
{
_totalPages = totalPages;
}
public ICommand PrevCommand => new RelayCommand(PrevPage, CanPrevPage);
public ICommand NextCommand => new RelayCommand(NextPage, CanNextPage);
public int CurrentPage
{
get => _currentPage;
set
{
_currentPage = value;
OnPropertyChanged(nameof(CurrentPage));
}
}
public int TotalPages
{
get => _totalPages;
set
{
_totalPages = value;
OnPropertyChanged(nameof(TotalPages));
}
}
private bool CanPrevPage()
{
return CurrentPage > 1;
}
private bool CanNextPage()
{
return CurrentPage < TotalPages;
}
private void PrevPage()
{
if (CanPrevPage())
{
CurrentPage--;
}
}
private void NextPage()
{
if (CanNextPage())
{
CurrentPage++;
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
```
在代码中,我们使用了 `RelayCommand` 类来实现我们的命令,`CanPrevPage` 和 `CanNextPage` 方法分别用于判断是否能够向前或向后翻页,`PrevPage` 和 `NextPage` 方法分别用于向前或向后翻页,`OnPropertyChanged` 方法用于触发属性值更改事件,从而更新 UI。
最后,我们需要在页面中引用分页控件和视图模型类,并将它们进行绑定:
```xaml
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp1"
Title="MainWindow" Height="450" Width="800">
<Grid>
<local:CustomPaginateControl DataContext="{Binding PaginateViewModel}"/>
</Grid>
</Window>
```
在代码中,我们使用了 `CustomPaginateControl` 自定义控件,并将其绑定到视图模型类的实例,从而实现分页控件的功能。