WPF ViewModels分页代码
以下是一个简单的WPF ViewModel分页代码示例:
// 定义一个基本的分页ViewModel类
public class PagingViewModel<T> : INotifyPropertyChanged where T : class
{
private readonly ObservableCollection<T> _sourceList;
private readonly int _pageSize;
private int _pageIndex;
private ObservableCollection<T> _pagedList;
public PagingViewModel(ObservableCollection<T> sourceList, int pageSize)
{
_sourceList = sourceList;
_pageSize = pageSize;
_pageIndex = 0;
UpdatePagedList();
}
public ObservableCollection<T> PagedList
{
get { return _pagedList; }
set { _pagedList = value; OnPropertyChanged(); }
}
public int PageIndex
{
get { return _pageIndex; }
set
{
_pageIndex = value;
UpdatePagedList();
}
}
public int PageCount
{
get { return (int)Math.Ceiling((double)_sourceList.Count / _pageSize); }
}
private void UpdatePagedList()
{
int startIndex = _pageIndex * _pageSize;
int count = Math.Min(_pageSize, _sourceList.Count - startIndex);
PagedList = new ObservableCollection<T>(_sourceList.Skip(startIndex).Take(count));
}
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
使用方法:
// 创建一个ObservableCollection作为数据源
var items = new ObservableCollection<string>();
items.Add("Item 1");
items.Add("Item 2");
items.Add("Item 3");
items.Add("Item 4");
items.Add("Item 5");
// 创建一个PagingViewModel实例
var pagingViewModel = new PagingViewModel<string>(items, 2);
// 绑定PagedList和PageIndex到UI
ListBox.ItemsSource = pagingViewModel.PagedList;
TextBoxPageIndex.DataContext = pagingViewModel;
TextBoxPageIndex.SetBinding(TextBox.TextProperty, new Binding("PageIndex") { Mode = BindingMode.TwoWay });
这个示例使用ObservableCollection作为数据源,每页显示2个项。可以使用PageIndex属性来切换页面,并在UI中绑定。
原文地址: https://www.cveoy.top/t/topic/bq2l 著作权归作者所有。请勿转载和采集!