首页 > 其他分享 >如何用界面组件DevExpress WPF Scheduler实现数据的按需加载?

如何用界面组件DevExpress WPF Scheduler实现数据的按需加载?

时间:2022-08-24 11:45:04浏览次数:105  
标签:控件 DevExpress Scheduler WPF 数据 加载

DevExpress WPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件的衍伸产品,还是以数据为中心的商业智能产品,都能通过DevExpress WPF控件来实现。

DevExpress WPF v22.1正式版下载

在v20.2版本中,技术团队为WPF Scheduler控件添加了按需数据加载支持,本文将为大家介绍如何使用WPF Scheduler的API在WPF应用程序中配置数据加载逻辑。

性能影响

按需从源中获取数据是一种常用技术,可以缩短具有大型数据集的应用程序的启动时间。 为了帮助您估算收益,我们测量了 Scheduler 控件加载计划所需的时间:

 

这些测量没有考虑从源加载数据项所花费的时间,对于速度较慢的数据库和服务,仅加载部分数据的性能提升会更高。

按需加载入门指南

要启用按需数据加载,您必须处理 DataSource.FetchAppointments 事件(时间区域有一个单独的 DataSource.FetchTimeRegions 事件)。 当您处理这些事件时,DevExpress WPF Scheduler仅在其当前可见的时间间隔内加载数据,当用户从一个时间段导航到另一个时间段时,我们的WPF Scheduler会从数据源中查询更多信息(根据需要),缓存加载的数据以减少查询频率。

为了进一步降低查询频率,WPF Scheduler将加载数据的时间间隔扩展到 DataSource.FetchRange 属性值,默认FetchRange为1个月。旦用户滚动超出此范围,Scheduler只会重新计算此时间间隔:

实现

以下代码示例演示了如何为DbContext数据源引入按需数据加载:

// Data context
public class SchedulingDataContext : DbContext {
public SchedulingDataContext() : base(CreateConnection(), true) { }
static DbConnection CreateConnection() {
//...
}
// Data items
public DbSet<AppointmentEntity> AppointmentEntities { get; set; }

//...
}

// Event implementation
void dataSource_FetchAppointments(object sender, DevExpress.Xpf.Scheduling.FetchDataEventArgs e) {
// Pass data objects to the event's Result property
e.Result = dbContext.AppointmentEntities.Where(
// The search query.
// Use the item's QueryStart and QueryEnd properties to calculate the correct interval
// as they take recurrence patterns into account.
// The event's Interval property returns the time interval for which to load data objects.
// Its value is the SchedulerControl.VisibleIntervals extended to the DataSource.FetchRange property value in both directions.
x => x.QueryStart <= e.Interval.End && x.QueryEnd >= e.Interval.Start)
.ToArray();
}

此代码段中的 Where 方法的参数是一个基本的搜索查询,不涉及过滤,您可以改用 FetchDataEventArgs.GetFetchExpression 方法来简化实现:

void FetchAppointments(FetchDataEventArgs e) {
e.Result = dbContext.AppointmentEntities
.Where(e.GetFetchExpression<AppointmentEntity>()).ToArray();
}
同步Scheduler和源

要同步数据源和Scheduler(部分加载数据),您需要手动保存更改,内置的 CRUD 事件简化了这一要求,可以为所有四个事件编写一个处理程序:

<dxsch:SchedulerControl
AppointmentAdded="ProcessChanges"
AppointmentEdited="ProcessChanges"
AppointmentRemoved="ProcessChanges"
AppointmentRestored="ProcessChanges"/>
void ProcessChanges(object sender, AppointmentCRUDEventArgs e) {
db.Appointments.AddRange(e.AddToSource.Select(x => (Appointment)x.SourceObject));
db.Appointments.RemoveRange(e.DeleteFromSource.Select(x => (Appointment)x.SourceObject));
db.SaveChanges();
}

如果您想了解有关按需数据加载的更多信息,并且您的计算机上安装了DevExpress WPF组件,请单击下面的链接以启动我们的示例演示:

数据按需加载演示:dxdemo://Wpf/DXScheduling/MainDemo/OnDemandDataLoading


DevExpress技术交流群6:600715373      欢迎一起进群讨论

更多DevExpress线上公开课、中文教程资讯请上中文网获取

标签:控件,DevExpress,Scheduler,WPF,数据,加载
From: https://www.cnblogs.com/AABBbaby/p/16619314.html

相关文章

  • WPF开发快速入门【0】前言与目录
    前言WPF是一个生不逢时的技术,刚推出的时候由于是XP时代,WPF技术有两个不方便的地方:1、由于操作系统没有自带Framework,需要另外安装,比较麻烦;2、程序第一次启动时,由于要加......
  • WPF开发快速入门【1】WPF的布局
    概述本文描述几款WPF中常用的布局控件。 GridGrid是WPF最常用的布局控件。 它把面板分割为固定长和宽的网格,子控件就放置在网格内。<Grid><Grid.Colu......
  • WPF开发快速入门【2】WPF的基本特性(Style、Trigger、Template)
    概述本文描述几个WPF的常用特性,包括:样式、触发器和控件模板。 样式/StyleStyle就是控件的外观,在XAML中,我们通过修改控件的属性值来设置它的样式,如:<!--直接定义styl......
  • WPF开发快速入门【3】WPF的基本特性(附加属性)
    概述本文描述WPF的附加属性。对于使用MVVM框架的项目,附加属性是非常重要的一个特性。 在MVVM框架下,ViewModel的代码通过控件的依赖属性来控制控件的,例如://ViewModel......
  • WPF 在 Xaml 中设置当控件显示时夺取焦点.
    以下以一个 TextBox 为例,当其变为可见时,获得焦点 <TextBoxx:Name="TextBoxName"/><TextBox.Style><StyleBasedOn="{StaticResource{......
  • Wpf 收到键盘事件时执行 ViewModel 中的命令.
    以 TextBox 中按下 Esc 为例:1<TextBox/>2<TextBox.InputBindings>3<KeyBinding4Key="Escape"5Command="{BindingPa......
  • WPF 数据验证
     ValidationValidationRule iDataErrorInfo+DataAnimation的用法//Validation:依赖属性用(在验证回调中返回false)//ValidationRule:依赖属性和普通类的属性都能用......
  • WPF Type Converter和 IValueConverter
    初学者。博客仅做个人的理解整理,不到位的地方欢迎大佬们指出,感谢。 1.类型转换器 TypeConverter1.1类型转换器是用来干什么的?在xaml中给控件的属性赋值,后台代码解析......
  • WPF绑定
    初学者。博客仅做个人的理解整理,不到位的地方欢迎大佬们指出,感谢。 1.绑定使用的关键字:Binding2.为什么要?把界面上的控件的属性和后台的变量绑定起来,达到效果:在后代修......
  • 来瞧瞧,WPF 炫酷走马灯!
    来瞧瞧,WPF炫酷走马灯!控件名:SpotLight作者:WPFDevelopersOrg原文链接:https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用大于等于.NET40;VisualS......