WPF ViewModel类分页
WPF ViewModel类可以使用以下步骤实现分页:
-
创建一个ViewModel类,包含数据源和分页逻辑。
-
在ViewModel类中定义分页所需的属性,如当前页码、总页数、每页显示的数据量等。
-
在ViewModel类中定义分页逻辑,根据当前页码和每页显示的数据量从数据源中获取对应的数据。
-
在View中使用分页控件(如DataPager)绑定ViewModel中的分页属性,实现分页显示。
以下是一个简单的WPF ViewModel类分页示例:
ViewModel类:
public class MyViewModel : INotifyPropertyChanged
{
private ObservableCollection<MyData> _allData;
private ObservableCollection<MyData> _pagedData;
private int _currentPage;
private int _pageSize;
private int _totalPages;
public event PropertyChangedEventHandler PropertyChanged;
public ObservableCollection<MyData> PagedData
{
get { return _pagedData; }
set
{
_pagedData = value;
OnPropertyChanged(nameof(PagedData));
}
}
public int CurrentPage
{
get { return _currentPage; }
set
{
if (_currentPage != value)
{
_currentPage = value;
OnPropertyChanged(nameof(CurrentPage));
LoadPagedData();
}
}
}
public int PageSize
{
get { return _pageSize; }
set
{
if (_pageSize != value)
{
_pageSize = value;
OnPropertyChanged(nameof(PageSize));
LoadPagedData();
}
}
}
public int TotalPages
{
get { return _totalPages; }
set
{
_totalPages = value;
OnPropertyChanged(nameof(TotalPages));
}
}
public MyViewModel(ObservableCollection<MyData> allData, int pageSize)
{
_allData = allData;
_pageSize = pageSize;
_currentPage = 1;
LoadPagedData();
}
private void LoadPagedData()
{
int startIndex = (_currentPage - 1) * _pageSize;
PagedData = new ObservableCollection<MyData>(_allData.Skip(startIndex).Take(_pageSize));
TotalPages = (int)Math.Ceiling((double)_allData.Count / _pageSize);
}
private void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
View中的分页控件:
<DataPager x:Name="MyPager"
PageSize="{Binding PageSize, Mode=TwoWay}"
PageCount="{Binding TotalPages}"
NumericButtonCount="5"
DisplayMode="FirstLastPreviousNext"
CurrentPage="{Binding CurrentPage, Mode=TwoWay}" />
View中的数据绑定:
<DataGrid ItemsSource="{Binding PagedData}" />
在View的构造函数中实例化ViewModel:
public MainWindow()
{
InitializeComponent();
ObservableCollection<MyData> allData = new ObservableCollection<MyData>(GetAllData());
MyViewModel viewModel = new MyViewModel(allData, 10);
DataContext = viewModel;
}
以上示例中,ViewModel类利用ObservableCollection作为数据源,根据分页逻辑从数据源中获取对应的数据,并绑定到PagedData属性中,View中的分页控件和数据绑定则通过绑定ViewModel中的分页属性实现分页显示。
原文地址: https://www.cveoy.top/t/topic/bDnn 著作权归作者所有。请勿转载和采集!