WPF 版本 4.5 的新增功能 – 中文
WPF 版本 4.5 的新增功能
.NET Framework 4.5
本主题包含有关 Windows Presentation Foundation (WPF) 版本 4.5 中的新增功能和增强功能的信息。
本主题包含以下14节:
1)新增Ribbon控件
WPF 4.5新增控件Ribbon:能快速访问工具栏、应用程序菜单和选项的 Ribbon 控件。 有关更多信息,请参见功能区概述。
2)当显示大数据项或大集合时,可设置虚拟分组以改善性能
用户界面(UI)设定虚拟分组的原则:
依据哪些子项需要在屏幕上可见的原则,可将大数据项拆分成由小数据构成的子集。(类似于dir/p/w分页显示文件?)
在VirtualizingPanel 新增 IsVirtualizingWhenGrouping 附加属性。
IsVirtualizingWhenGrouping:是否开启分组数据的UI虚拟化功能。
有关分组的数据的更多信息,请参见如何在XAML中使用视图进行排序和分组数据。 有关有效分组数据的更多信息,请参见 IsVirtualizingWhenGrouping 附加属性。
3)VirtualizingPanel的新功能 ------ 是否显示分项和指定缓存长度
4)绑定到静态属性 ------当属性值被更改时,引发静态事件
使用静态属性作为数据绑定源,数据绑定引擎能识别静态属性值被更改而引发静态事件。 例如,如果类SomeClass 定义名为 MyProperty的静态属性, SomeClass 还可以定义当 MyProperty 的值发生更改时,引发的静态事件。 静态事件可使用下面的任意一种签名声明。
请注意在第一种情况下,类使用静态事件PropertyNameChanged传递 EventArgs 到事件处理程序。 在第二种情况下,类使用静态事件StaticPropertyChanged 传递PropertyChangedEventArgs 到事件处理程序。
类可使用上述任何一种方式,引发属性更改通知。
5)在非UI线程访问集合
WPF可使用一个线程访问和修改另外一个线程上的数据集。 您可使用后台线程接收从外部源的数据(如数据库),并将此数据显示在用户界面线程上。 使用另一个线程修改数据集,用户界面无需等待,可实时响应用户交互的要求。 (问:在多线程且要求响应效率越快越好的应用程序中,比invoke效率高吗?耗内存吗?这个功能如何实现的?好奇中,看似很好用)
6)同步和异步验证数据
INotifyDataErrorInfo 接口允许数据实体类执行自定义验证规则和异步导出验证结果。 此接口还支持自定义错误对象,一个属性多个错误,跨属性错误和实体级错误。 有关更多信息,请参见INotifyDataErrorInfo。
7)自动更新数据绑定源------新增设定延迟时间更新数据源
如果您使用数据绑定更新数据源,可以使用 Delay 属性设置延迟时间,在目标属性被更改之后,依据特定的延迟时间刷新数据源。例如,假设你有个滑动条Slider,将其Value属性双向绑定到数据对象属性,并将UpdateSourceTrigger 属性设置为 PropertyChanged。 在这个示例中,当用户移动 Slider, 数据源随着Slider 移动的每个像素不断更新。但是仅当滑块的 Value 停止更改时,源对象才需要滑块的值。 若要防止太频繁更新数据源,请使用 Delay 指定特定的时间段,在滚动块停止移动后,才更新数据源。
(类似应用- 解决editbox文本框控件输入一个字符的响应事件的频繁触发)
8)绑定到实现ICustomTypeProvider的类型
WPF支持数据绑定到实现 ICustomTypeProvider的对象,也称为自定义类型。 可以在以下情况下使用自定义类型。
9)用约束表达式检索数据绑定信息
在某些情况下,您可能需要Binding的 BindingExpression 去获得绑定的源和目标对象的有关信息。 新API提供获取源,目标对象或该关联的属性。 当您有 BindingExpression时,请使用目标与源的以下API获取有关信息。
查找绑定的该值 |
使用此API |
目标对象 |
|
目标属性 |
|
源对象 |
|
源属性 |
|
BindingGroup 的所有者 |
10)检查 DataContext对象的有效性
在 ItemsControl 断开连接时,须检查项容器的DataContext的有效性。 项容器是显示在 ItemsControl的项的UI元素。 当 ItemsControl 的数据绑定到集合时,每个项目生成相应的项容器。 在某些情况下,项容器从可视化树中移除,一是项从基础集合中移除,二是在 ItemsControl启用虚拟化。 在这些情况下,项容器的 DataContext 属性将被设置为由 BindingOperations.DisconnectedSource 静态属性返回的sentinel对象。 您在访问项容器的 DataContext 之前,应检查 DataContext与 DisconnectedSource 对象是否相同。
11)当数据值被更改时重新定位数据 (Live建模)
当支持分组、排序或筛选的数据集被修改时,WPF 4.5能重新排列该数据集。例如,假设应用程序在一个股票市场中使用 DataGrid 作为股票列表,且股票由股票值排序。 如果股票的 CollectionView正以实时排序,当此股票的值大于或小于另一个股票值时,也随之更改股票在DataGrid的相应位置。 有关更多信息,请参见 ICollectionViewLiveShaping 接口。
12)改进事件的弱引用
现在更加容易实现弱事件模式,因为操作的用户可以参与其中,而不再需要实现额外的接口。对于某个特定事件来说,即使专用 WeakEventManager 不存在,泛型 WeakEventManager 类也提供用户能够参与弱事件模式。 有关更多信息,请参见弱事件模式。
13) Dispatcher类的新方法 ------同步和异步操作
Dispatcher类定义了同步和异步操作的新方法。 同步 Invoke 方法重载了采用 Action 或 Func<TResult> 参数。 新的异步方法InvokeAsync,也采用 Action 或 Func<TResult> 作为回调参数并返回 DispatcherOperation 或 DispatcherOperation<TResult>。 DispatcherOperation 和 DispatcherOperation<TResult> 类还定义了 Task 属性。 当您调用 InvokeAsync时,可以使用 DispatcherOperation 或关联的 Task的 await 关键字。 如果需要同步等待由 DispatcherOperation 或 DispatcherOperation<TResult>返回的Task ,请调用 DispatcherOperationWait 扩展方法。值得注意的是如果操作已在调用线程中排队,调用 Task::Wait 将导致死锁。 有关使用 Task执行异步操作的更多信息,请参见 任务并行(任务并行库)。
14)事件的标记扩展
WPF 4.5支持事件的标记扩展。 当WPF没有定义事件的标记扩展,第三方可创建用于事件的标记扩展。
See Also
Concepts
What's New in the .NET Framework 4.5
请参见
概念
.NET Framework 4.5 中的新增功能