Xamarin的Telerik UI?下载30天免费试用

按需负载

在特定情况下,您可能需要在已经显示控件时加载DataGrid中的数据,因为这可以提高性能并节省计算资源。在移动设备上加载大型数据集是有挑战的。最流行的方法之一是在需要可视化项目时使用增量数据加载。

配置

DataGrid提供了两种加载模式LoadOnDemandMode枚举:

  • 自动:当您向下滚动视图端口中出现的最后一个项目附近时,按需加载机制将被激活。

    属性可以更精确地控制项目开始加载的时间LoadOnDemandBufferItemsCount财产。它指示附加项将在何时开始加载。例如,将其设置为20将导致在滚动RadDataGrid时加载新项,以便下面只剩下20个原始加载的项。

  • 手册: RadDataGrid底部有一个“Load More”按钮。单击它将根据您所选择的加载项的方法(通过事件、命令或集合)加载其他项。

按需加载数据的方法

方法有三种不同的选项可按需加载数据,而不管您是否使用自动手册加载模式。您可以根据您的应用需求选择最方便的:

在ListView中按需加载项目的所有三种方法都适用于自动和手动LoadOnDemandMode。

使用LoadOnDemand集合

为了使用这种方法,您应该为RadDataGrid类型的集合LoadOnDemandCollection.它是一个泛型类型,因此您需要指出它将包含的对象类型。它扩展了ObservableCollection类,并在构造函数中期望Func

下面是一个简单的设置,展示了如何使用集合:

  1. 定义一个示例ViewModel类项目LoadOnDemandCollection类型的属性:

    public类LoadOnDemandViewModel {public LoadOnDemandViewModel() {this。项目= new LoadOnDemandCollection((cancelationToken) => { var list = new List(); for (int i = 0; i < 10; i++) { var person = new Person { Name = "LOD Person " + i, Age = i + 18, Gender = i % 2 == 0 ? Gender.Male : Gender.Female }; list.Add(person); } return list; }); //set initial items for (int i = 0; i < 20; i++) { var person = new Person { Name = "Person " + i, Age = i + 18, Gender = i % 2 == 0 ? Gender.Male : Gender.Female }; this.Items.Add(person); } } public LoadOnDemandCollection Items { get; set; } }
  2. 添加样本数据项:

    公开类Person{公开字符串Name {get;设置;}公共int年龄{获取;设置;}公共性别性别{得到;设置;}}
  3. 定义RadDataGrid实例并将其ItemsSource绑定到ViewModel中的数据。注意,该方法对两者都适用手册而且自动加载模式。

     . 
                
    这一点。BindingContext = new LoadOnDemandViewModel();

    文件的“DataGrid -> LoadOnDemand”文件夹中有一个LoadOnDemandCollection示例SDK浏览器应用

    方法中的代码可以直接查看GitHub上的浏览器资源库

使用LoadOnDemand事件

方法加载新项LoadOnDemand事件。它使用LoadOnDemandEventArgs参数,您需要通过该参数指示何时加载数据,以便之后正确地触发事件。

下面的例子演示了如何使用LoadOnDemand事件:

  1. 定义带有LoadOnDemand事件的RadDataGrid实例:

  2. 在页面构造函数中设置DataGrid ItemsSource:

    var items = new ObservableCollection();For (int I = 0;I < 20;i++) {var person = new person {Name = " person " + i,年龄= i+ 18,性别= i % 2 == 0 ?性别。男:性别。女性};items.Add(人);} this.dataGrid.ItemsSource =项目;
  3. 添加样本数据项:

    公开类Person{公开字符串Name {get;设置;}公共int年龄{获取;设置;}公共性别性别{得到;设置;}}
  4. 添加LoadOnDemand事件处理程序:

    private void DataGrid_LoadOnDemand(对象发送器,telererik . xamarinforms . datagrid . loadondemandeventargs e) {for (int i = 0;I < 15;i++){((发送方为RadDataGrid)。项目Source as ObservableCollection).Add(new Person() { Name = "Person " + i, Age = i + 18, Gender = i % 2 == 0 ? Gender.Male : Gender.Female }); } e.IsDataLoaded = true; }

    “DataGrid -> LoadOnDemandEvent”文件夹中有一个LoadOnDemand事件示例SDK浏览器应用

    方法中的代码可以直接查看GitHub上的浏览器资源库

使用LoadMoreData命令

LoadMoreData命令是另一个您可以使用的替代方案,它适用于MVVM场景。

下面是一个创建LoadMoreData命令的例子:

  1. 添加一个CustomLoadMoreDataCommand类,它继承自DataGridCommand类,并将其IdDataGridCommandId。LoadMoreData.在Execute方法中添加加载数据所需的逻辑。

    公共类CustomLoadMoreDataCommand: DataGridCommand {public CustomLoadMoreDataCommand() {this。Id = datagridcommanddid . loadmoredata;} public override bool CanExecute(对象参数){返回true;} public async override void执行(对象参数){if(参数== null){返回;} ((LoadOnDemandContext)参数).ShowLoadOnDemandLoadingIndicator ();等待System.Threading.Tasks.Task.Delay (1500);var viewModel = this.Owner.BindingContext as LoadMoreDataCommandViewModel;if (viewModel != null) {for (int i = 0;I < 10;i++) {viewModel.Items。添加(新的人{名字=“人”+ i,年龄= i + 18,性别= i % 2 == 0 ? Gender.Male : Gender.Female }); } } ((LoadOnDemandContext)parameter).HideLoadOnDemandLoadingIndicator(); } }

    调用ShowLoadOnDemandLoadingIndicator而且HideLoadOnDemandLoadingIndicators是一个值得注意的部分,因为如果不调用这些方法,用于该功能的BusyIndicator将不会被可视化。

  2. 添加一个示例ViewModel类来加载初始数据:

    public类LoadMoreDataCommandViewModel {public LoadMoreDataCommandViewModel() {this。Items = new ObservableCollection();For (int I = 0;I < 20;i++) {var person = new person {Name = " person " + i,年龄= i+ 18,性别= i % 2 == 0 ?性别。男:性别。女性};this.Items.Add(人);}} public ObservableCollection Items {get;设置;}}
  3. 添加样本数据项:

    公开类Person{公开字符串Name {get;设置;}公共int年龄{获取;设置;}公共性别性别{得到;设置;}}
  4. 属性在XAML中定义RadDataGrid实例CustomLoadMoreDataCommand命令添加到命令集合:

        < / telerikGrid: RadDataGrid >
  5. 在页面构造函数中将ViewModel设置为BindingContext:

    这一点。BindingContext = new LoadMoreDataCommandViewModel();

    LoadOnDemand事件示例可在“DataGrid -> LoadMoreDataCommand”文件夹中找到SDK浏览器应用

    方法中的代码可以直接查看GitHub上的浏览器资源库

样式

除了加载数据的不同方法之外,RadDataGrid公开与功能样式相关的几种机制,您可以根据所选择的方法使用这些机制。

LoadOnDemandAutoTemplate

设置此属性将修改随需应变负载指示器的外观LoadOnDemandMode自动

下面是一个自定义数据模板的例子:

 

以及如何将它设置为RadDataGrid的LoadOnDemandAutoTemplate属性:

图1:设置LoadOnDemandAutoTemplate后的行外观

LoadOnDemandRowStyle

属性时,此属性可用于设置包含“加载更多”按钮的行的外观样式LoadOnDemandMode手册

自定义样式的类型是DataGridLoadOnDemandRowStyle:

你应该把它设置为RadDataGrid的LoadOnDemandRowStyle属性:

 .

图2:设置LoadOnDemandRowStyle后的行外观

LoadOnDemandRowTemplate

属性时,此属性可用于设置包含“加载更多”按钮的行模板LoadOnDemandMode手册

这是一个自定义的数据模板:

  

以及如何设置属性:

 .

图3:设置LoadOnDemandRowTemplate后的行外观

另请参阅

在本文中
Baidu
map