2011-11-01 49 views
8

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

我知道如何使用:

Dispatcher 
Task 
BackgroundWorker 
Threads 

我找了更先进的技巧,像结合的提示...当我有我的用户界面,需要更新50+控制。

PriorityBinding 
Populating ComboBoxes 
Populating ListBoxes, ListViews 

时在后台处理数据...... 最佳做法也许当谈到长期运行proccess。

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

回答

16
  1. FastObservableCollection

  2. 操纵PresentationSource

  3. 通过使用 AsQueryable()比单线程的数据源的动态过滤和线程不可知CollectionView使用在多个线程PLinq或LINQ。

  4. 成衣Gifs在动画

  5. 非虚拟化面板的虚拟化技术的像画布

  6. 递延滚动

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

  8. BeginStoryboard.HandoffBehavior = “撰写”

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

  10. 避免WindowStyle=NoneAllowTransparency=trueBackground=TransparentTileMode

  11. 配置RenderOptions.BitmpaScalingMode作为低质量和使能缓存。启用PresentationFontCache Windows服务。

  12. 使用Staticresources超过Dynamicresources

  13. 避免可继承依赖属性。还要避免在财产变更回调中进行繁重的操作。

  14. 使用Freezable笔刷。避免x:Name/Namescoping/BindingColor propertys他们一直冻结。

  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。

还有更多...

+0

非常有帮助。 Thx天使。 =) – Willem

+0

最终禁用所有最好的图形,并使应用程序看起来像旧式赢32应用程序:) –

0

在单个用户界面上的50多个控件听起来像是由编码器设计的,优化代码可能会在一段时间内抵消实际问题。最好的办法是将您的功能分离到不同的屏幕上或隐藏菜单后面的较少使用的信息。

1

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

但说实话:马丁是相当正确的... 50+的数据绑定控件,...男人,这是刻着地狱;-)

而且你的追求100%的反应,我想,需要进一步说明。据我的理解,应用程序可以是响应或不响应(以用户输入/产生输出vs卡住无所事事)。你的目标是最好的表现吗?或者它是一个你正在面临的rowlocking场景(让用户在某些记录上执行长时间任务时编辑其他记录)?

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

+0

是的,50+控件似乎分配,但它们都同样重要。花费时间最长的部分是组合对象上的项目源的绑定...但Form(View)的初始加载需要很长时间。我希望快速的形式,然后其余的绑定可以发生或类似的事情。当用户点击需要很长时间才能打开的下拉菜单时,由于海量数据...因此,我有点卡住了 – Willem

+1

好的,如果有任何帮助,请查看本文中的信息: http://blogs.msdn.com/b/jgoldb/archive/2007/10/10/improving-wpf-applications-startup-time.aspx。 –