WPF ViewModel类可以使用以下步骤实现分页:

  1. 创建一个ViewModel类,包含数据源和分页逻辑。

  2. 在ViewModel类中定义分页所需的属性,如当前页码、总页数、每页显示的数据量等。

  3. 在ViewModel类中定义分页逻辑,根据当前页码和每页显示的数据量从数据源中获取对应的数据。

  4. 在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中的分页属性实现分页显示。

WPF ViewModel类分页

原文地址: https://www.cveoy.top/t/topic/bDnn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录