响应式UI提示

时间:2011-11-01 09:15:08

标签: c# .net wpf

我想在创建响应式用户界面时提供一些提示。

我知道如何使用:

Dispatcher
Task
BackgroundWorker
Threads

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

PriorityBinding
Populating ComboBoxes
Populating ListBoxes, ListViews

在后台处理数据时...... 最佳实践可能涉及长期过程。

我还能做些什么来让我的用户界面100%响应。

3 个答案:

答案 0 :(得分:16)

  1. FastObservableCollection

  2. 操纵PresentationSource

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

  4. Readymade Gifs over animation

  5. 像canvas一样非虚拟化面板的虚拟化

  6. 延迟滚动

  7. 动画的Trigger.Exnter \ Exit动作。

  8. BeginStoryboard.HandoffBehavior = “撰写”

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

  10. 避免WindowStyle=NoneAllowTransparency=trueBackground=TransparentTileMode

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

  12. 使用Staticresources而不是Dynamicresources

  13. 避免可继承的依赖项属性。还要避免在属性更改的回调中进行大量操作。

  14. 使用Freezable画笔。避免x:Name / Namescoping / Binding到他们的Color财产,他们可以随时冻结。

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

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

  17. 默认情况下,ExpandersIsExpanded=False一起使用。

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

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

  20. 使用基于WPF Extedned Tooklit的着色器效果和新的像素着色器API 例如Blur,Shadow。

  21. 还有更多......

答案 1 :(得分:1)

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

但说实话:马丁是对的...... 50多个数据绑定控件,......男人,那真是太棒了! - )

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

我认为AngelWPF提到的一些内容可以在this neat article中找到优先级绑定。

答案 2 :(得分:0)

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