WPF Listbox上一页下一页
时间: 2023-10-14 16:26:12 浏览: 168
在WPF中,可以使用CollectionViewSource对ListBox进行分页操作。以下是一个简单的示例代码,可以实现ListBox的上一页和下一页功能:
XAML代码:
```xml
<Window.Resources>
<CollectionViewSource x:Key="cvs" Source="{Binding Items}" PageSize="5"/>
</Window.Resources>
<Grid>
<ListBox ItemsSource="{Binding Source={StaticResource cvs}}"
ScrollViewer.CanContentScroll="False"
ScrollViewer.VerticalScrollBarVisibility="Visible"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Button Content="上一页" Command="{Binding Path=PageUpCommand, Source={StaticResource cvs}}"/>
<Button Content="下一页" Command="{Binding Path=PageDownCommand, Source={StaticResource cvs}}"/>
</StackPanel>
</Grid>
```
在代码中,我们使用CollectionViewSource作为ListBox的数据源,并设置PageSize为5,表示每页显示5个项。接下来,我们在界面中添加两个按钮,分别绑定上一页和下一页命令。
C#代码:
```csharp
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new ViewModel();
}
}
public class ViewModel
{
public ObservableCollection<string> Items { get; set; }
public ICommand PageUpCommand { get; set; }
public ICommand PageDownCommand { get; set; }
private CollectionViewSource _cvs;
private int _currentPage = 0;
public ViewModel()
{
Items = new ObservableCollection<string>();
for (int i = 0; i < 50; i++)
{
Items.Add("Item " + i);
}
_cvs = new CollectionViewSource();
_cvs.Source = Items;
_cvs.PageSize = 5;
PageUpCommand = new RelayCommand(() =>
{
if (_currentPage > 0)
{
_currentPage--;
_cvs.View.MoveCurrentToPreviousPage();
}
}, () => _cvs.View != null && _cvs.View.CurrentPosition > 0);
PageDownCommand = new RelayCommand(() =>
{
if (_currentPage < _cvs.View.PageCount - 1)
{
_currentPage++;
_cvs.View.MoveCurrentToNextPage();
}
}, () => _cvs.View != null && _cvs.View.CurrentPosition < _cvs.View.Count - 1);
}
}
```
在ViewModel中,我们使用了ObservableCollection作为ListBox的数据源,并在构造函数中初始化了50个项。然后,我们创建了一个CollectionViewSource对象,并将其Source属性绑定到ObservableCollection的Items属性上。接着,我们定义了两个RelayCommand对象,分别绑定上一页和下一页的操作。在RelayCommand的执行方法中,我们通过CollectionView的MoveCurrentToPreviousPage和MoveCurrentToNextPage方法来实现上一页和下一页的跳转操作。同时,我们还定义了CanExecute方法,用于判断上一页和下一页命令是否可用。
需要注意的是,在ListBox中,我们设置了ScrollViewer.CanContentScroll属性为False,这样可以使ListBox的滚动条按照像素的方式进行滚动,而不是按照项的方式进行滚动,从而更加方便地实现分页操作。
阅读全文