我想在创建响应式用户界面时提供一些提示。
我知道如何使用:
Dispatcher
Task
BackgroundWorker
Threads
我正在寻找更多高级提示,例如绑定提示......当我的UI上有50多个需要更新的控件时。
PriorityBinding
Populating ComboBoxes
Populating ListBoxes, ListViews
在后台处理数据时...... 最佳实践可能涉及长期过程。
我还能做些什么来让我的用户界面100%响应。
答案 0 :(得分:16)
使用PLinq或Linq在多个线程上使用
AsQueryable()用于动态过滤数据源,而不是单线程和线程无关CollectionView
。
Readymade Gifs over animation
像canvas一样非虚拟化面板的虚拟化
延迟滚动
动画的Trigger.Exnter \ Exit动作。
BeginStoryboard.HandoffBehavior = “撰写”
使用硬件加软件加速。
避免WindowStyle=None
,AllowTransparency=true
,Background=Transparent
,TileMode
将RenderOptions.BitmpaScalingMode
配置为LowQuality并启用缓存。启用PresentationFontCache
Windows服务。
使用Staticresources
而不是Dynamicresources
避免可继承的依赖项属性。还要避免在属性更改的回调中进行大量操作。
使用Freezable画笔。避免x:Name
/ Namescoping
/ Binding
到他们的Color
财产,他们可以随时冻结。
设置边框的背景,如果它封装了视觉效果而不是设置视觉效果的背景。类似的情况是,如果您将Brush
设置为视觉效果的背景,请指定Brush.Opacity
而不是Visual.Opacity
。
值转换器必须具有最小化代码。在适用的地方使用Binding.IsAsync
和PriorityBinding
。
默认情况下,Expanders
与IsExpanded=False
一起使用。
CompositionTarget.Rendering
会在每个渲染周期触发,因此只应在需要时使用。任何机会都要抓住它。
WPF DataGrid
应该避免大量使用组合框列和可编辑的模板列,因为combobx模板尝试加载选定的值并使用显示成员路径,实际从当与高度可观察的集合一起使用时,每个组合框和模板列都会泄漏。
使用基于WPF Extedned Tooklit的着色器效果和新的像素着色器API 例如Blur,Shadow。
还有更多......
答案 1 :(得分:1)
我总是发现延迟加载非常有助于防止一次加载大量数据,这是处理大量数据时大多数启动时间所在。将您的记录绑定到virtualized项目控件,以最大限度地减少内存占用(显然WPF是您对内存中所需内容的判断)。
但说实话:马丁是对的...... 50多个数据绑定控件,......男人,那真是太棒了! - )
我想,你对100%响应能力的追求需要进一步解释。根据我的理解,应用程序可以响应或不响应(采用用户输入/生成输出而不是无所事事)。你的目标是最佳表现吗?或者它是您正面临的行锁定场景(让用户在对某些记录执行长任务时编辑其他记录)?
我认为AngelWPF提到的一些内容可以在this neat article中找到优先级绑定。
答案 2 :(得分:0)