zoukankan      html  css  js  c++  java
  • wpf gridview 滚动懒加载

    <Window x:Class="WpfApplication5.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
            mc:Ignorable="d"
            Title="MainWindow" Height="800" Width="1000">
        <Grid>
            <telerik:RadGridView x:Name="IssueGrid" Grid.Row="0" Height="150"
                                 ItemsSource="{Binding CollectionView}"
                                 ShowSearchPanel="True"
                                 ShowGroupPanel="False"
                                 GroupRenderMode="Flat"
                                 RowDetailsVisibilityMode="VisibleWhenSelected"
                                 RowIndicatorVisibility="Collapsed"
                                 IsReadOnly="True"
                                 IsFilteringAllowed="False"
                                 AutoGenerateColumns="False"
                                 CanUserFreezeColumns="False" Margin="5,0">
                <telerik:RadGridView.Columns>
                    <telerik:GridViewDataColumn Header="重要程度" Width="200" 
                                                          DataMemberBinding="{Binding Id}"/>
                    <telerik:GridViewDataColumn Header="重要程度" Width="200" 
                                                          DataMemberBinding="{Binding Name}"/>
                    <telerik:GridViewDataColumn Header="重要程度" Width="200" 
                                                          DataMemberBinding="{Binding Age}"/>
                    <telerik:GridViewDataColumn Header="重要程度" Width="200" 
                                                          DataMemberBinding="{Binding Grade}"/>
                </telerik:RadGridView.Columns>
            </telerik:RadGridView>
        </Grid>
    </Window>

    后台代码

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Diagnostics;
    using System.Runtime.CompilerServices;
    using System.Threading.Tasks;
    using Telerik.Windows.Data;
    using WpfApplication5.Annotations;
    
    namespace WpfApplication5
    {
        public enum RequestStatus
        {
            None = 0,
            Requesting,
            Success,
            Failure
        }
        public class ViewModel:INotifyPropertyChanged
        {
            public VirtualQueryableCollectionView CollectionView { get; }
    
            protected Dictionary<int, RequestStatus> RequestMap { get; }
            public List<TestData> Datas=new List<TestData>();
            public List<TestData> ServicesDatas { get; set; }
    
            public bool IsBusy { get; set; }
            public ViewModel()
            {
                CollectionView=new VirtualQueryableCollectionView(Datas,typeof(TestData));
                CollectionView.LoadSize = 2;//加载页数
                CollectionView.ItemsLoading += OnItemsLoading;
                CollectionView.VirtualItemCount = 14;//总页数
                RequestMap = new Dictionary<int, RequestStatus>();
            }
    
            //根据条件取得数据 调用后台
            private async void OnItemsLoading(object sender, VirtualQueryableCollectionViewItemsLoadingEventArgs e)
            {
                var pageNo = (int)Math.Ceiling(1.0 * e.StartIndex / 2) + 1;//2是加载页数
                try
                {
                    IsBusy = true;
                    RequestStatus status;
                    if (!RequestMap.TryGetValue(pageNo, out status) || status == RequestStatus.Failure)
                    {
                        RequestMap[pageNo] = RequestStatus.Requesting;
                        ServicesDatas= await Task.Run((() => new List<TestData>()
                        {
                            new TestData() {Id = "1", Name = "2", Age = "3", Grade = "4"},
                            new TestData() {Id = "1", Name = "2", Age = "3", Grade = "4"},
                        }));
                        if (ServicesDatas == null) return;
                        RequestMap[pageNo] = RequestStatus.Success;
                        Datas.AddRange(ServicesDatas);
                        CollectionView.Refresh();
                    }
                }
                catch (Exception ex)
                {
                    RequestMap[pageNo] = RequestStatus.Failure;
                    Debug.WriteLine($"fail to fetch issues {ex}");
                }
                finally
                {
                    IsBusy = false;
                }
            }
    
            public event PropertyChangedEventHandler PropertyChanged;
    
            [NotifyPropertyChangedInvocator]
            protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
            {
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    
    
        public class TestData
        {
            public string Id { get; set; }
            public string Name { get; set; }
            public string Age { get; set; }
            public string Grade { get; set; }
        }
    }

     listbox 也适用

            <ListBox ItemsSource="{Binding CollectionView}" Height="150">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Margin="3">
                            <DockPanel >
                                <TextBlock Text="{Binding Id}" />
                                <TextBlock Text=", " />
                                <TextBlock Text="{Binding Name}" />
                                <TextBlock Text=", " />
                                <TextBlock Text="{Binding Age}" />
                            </DockPanel>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
  • 相关阅读:
    修改windows系统cookie、favorites、desktop等的位置到非系统盘
    第三章 多维随机变量及其分布4
    谈谈Ironpython的应用
    提问的智慧
    第三章 多维随机变量及其分布2
    用C#做 UG NX 二次开发 / NX Secondary Dev. with C#
    第六章 样本与抽样分布
    ufun视频教程(合) / Movie of UFUN
    第四章 随机变量的数字特征2
    第一章 概率论的基本概论
  • 原文地址:https://www.cnblogs.com/dzh1990/p/8966050.html
Copyright © 2011-2022 走看看