响应式UI提示
当我想创建一个响应式用户界面时,我只想提供一些提示。
我知道如何使用:
Dispatcher Task BackgroundWorker Threads
我正在寻找更多高级技巧,比如绑定提示……当我的UI上有50多个控件需要更新时。
PriorityBinding Populating ComboBoxes Populating ListBoxes, ListViews
在后台处理数据时…最佳实践可能涉及长时间运行的过程。
我还能做些什么来使我的UI 100%响应。
-
FastObservableCollection
-
操纵PresentationSource
-
通过使用AsQueryable ()来动态过滤数据源,而不是单线程和线程无关的
CollectionView
在多个线程上使用PLinq或Linq。 -
现成的GIF动画
-
像帆布这样的非虚拟化面板的虚拟化
-
延迟滚动
-
Trigger.Exnter \退出动画的动作。
-
BeginStoryboard.HandoffBehavior = “撰写”
-
使用硬件超过软件加速。
-
避免
WindowStyle=None
,AllowTransparency=true
,Background=Transparent
,TileMode
-
将RenderOptions.BitmpaScalingMode配置为LowQuality并启用缓存。 启用
PresentationFontCache
Windows服务。 -
在
Dynamicresources
使用Dynamicresources
-
避免可inheritance的依赖属性。 还要避免在属性更改回调中的繁重操作。
-
使用Freezable画笔。 避免
x:Name
/Namescoping
/Binding
到它们的Color
属性它们一直是freezable。 -
设置边框的背景,如果它封装视觉而不是设置视觉背景。 类似的是,如果您将
Brush
设置为视觉的背景,则指定Brush.Opacity
不是Visual.Opacity
。 -
值转换器必须具有最小化代码。 在适用的地方使用
Binding.IsAsync
和PriorityBinding
。 -
默认情况下,使用
Expanders
IsExpanded=False
的Expanders
程序。 -
CompositionTarget.Rendering
在每个渲染周期触发,因此只应在需要时使用。 任何机会都要抓住它。 -
WPF
DataGrid
应该避免大量使用combobox列和可编辑的模板列,因为combobx模板尝试加载选定的值并使用显示成员路径,通过从每个combobox的项目源实际搜索它和模板列泄漏与高度可观察的集合一起使用时。 -
使用WPF Extedned Tooklit基于Shader效果和New Pixel Shader API,如Blur,Shadow。
还有很多…
我总是发现延迟加载非常有助于防止一次加载大量数据,这是处理大量数据时大多数启动时间。 将您的记录绑定到虚拟化项控件,以最大限度地减少内存占用(显然,WPF是您在内存中所需要的判断)。
但说实话:马丁是对的… 50多个数据绑定控件,……男人,那个怪异的地狱;-)
我想,你对100%响应能力的追求需要进一步解释。 根据我的理解,应用程序可以响应或不响应(采用用户输入/生成输出而不是无所事事)。 你的目标是最佳表现吗? 或者它是您正面临的行锁定场景(让用户在对某些记录执行长任务时编辑其他记录)?
我认为AngelWPF提到的一些内容可以在这篇关于优先级绑定的简洁文章中找到。
单个UI上的50多个控件听起来像是由编码器设计的,优化代码可能只是暂时抵消了真正的问题。 加快速度的最佳方法是将您的function分离到不同的屏幕上或隐藏菜单背后较少使用的信息。