响应式UI提示

当我想创建一个响应式用户界面时,我只想提供一些提示。

我知道如何使用:

Dispatcher Task BackgroundWorker Threads 

我正在寻找更多高级技巧,比如绑定提示……当我的UI上有50多个控件需要更新时。

 PriorityBinding Populating ComboBoxes Populating ListBoxes, ListViews 

在后台处理数据时…最佳实践可能涉及长时间运行的过程。

我还能做些什么来使我的UI 100%响应。

  1. FastObservableCollection

  2. 操纵PresentationSource

  3. 通过使用AsQueryable ()来动态过滤数据源,而不是单线程和线程无关的CollectionView在多个线程上使用PLinq或Linq。

  4. 现成的GIF动画

  5. 像帆布这样的非虚拟化面板的虚拟化

  6. 延迟滚动

  7. Trigger.Exnter \退出动画的动作。

  8. BeginStoryboard.HandoffBehavior = “撰写”

  9. 使用硬件超过软件加速。

  10. 避免WindowStyle=NoneAllowTransparency=trueBackground=TransparentTileMode

  11. 将RenderOptions.BitmpaScalingMode配置为LowQuality并启用缓存。 启用PresentationFontCache Windows服务。

  12. Dynamicresources使用Dynamicresources

  13. 避免可inheritance的依赖属性。 还要避免在属性更改回调中的繁重操作。

  14. 使用Freezable画笔。 避免x:Name / Namescoping / Binding到它们的Color属性它们一直是freezable。

  15. 设置边框的背景,如果它封装视觉而不是设置视觉背景。 类似的是,如果您将Brush设置为视觉的背景,则指定Brush.Opacity不是Visual.Opacity

  16. 值转换器必须具有最小化代码。 在适用的地方使用Binding.IsAsyncPriorityBinding

  17. 默认情况下,使用Expanders IsExpanded=FalseExpanders程序。

  18. CompositionTarget.Rendering在每个渲染周期触发,因此只应在需要时使用。 任何机会都要抓住它。

  19. WPF DataGrid应该避免大量使用combobox列和可编辑的模板列,因为combobx模板尝试加载选定的值并使用显示成员路径,通过从每个combobox的项目源实际搜索它和模板列泄漏与高度可观察的集合一起使用时。

  20. 使用WPF Extedned Tooklit基于Shader效果和New Pixel Shader API,如Blur,Shadow。

还有很多…

我总是发现延迟加载非常有助于防止一次加载大量数据,这是处理大量数据时大多数启动时间。 将您的记录绑定到虚拟化项控件,以最大限度地减少内存占用(显然,WPF是您在内存中所需要的判断)。

但说实话:马丁是对的… 50多个数据绑定控件,……男人,那个怪异的地狱;-)

我想,你对100%响应能力的追求需要进一步解释。 根据我的理解,应用程序可以响应或不响应(采用用户输入/生成输出而不是无所事事)。 你的目标是最佳表现吗? 或者它是您正面临的行锁定场景(让用户在对某些记录执行长任务时编辑其他记录)?

我认为AngelWPF提到的一些内容可以在这篇关于优先级绑定的简洁文章中找到。

单个UI上的50多个控件听起来像是由编码器设计的,优化代码可能只是暂时抵消了真正的问题。 加快速度的最佳方法是将您的function分离到不同的屏幕上或隐藏菜单背后较少使用的信息。