我已经10年没有写过文章了WPF
,当时我也没有好好研究它。然后我需要再写一个问题。我可能堆积了很多自行车,我想弄清楚如何明智地做到这一点。
一般来说,.net版本中有XAML
一个可以快速显示图表的第三方控件。他的能力相当有限,不知道如何生活,但只能生活在。我还没有弄清楚如何更新 中的某些内容,因此在 中进行了一些计算,并且在hang中,它通过计时器滴答检查我是否选中了 中的复选框,如果选中了,则它会在控件中呈现。一般来说,它的简化形式如下所示:ScottPlot
WPF
ViewModel
code behind
code behind
View Model
View Model
code behind
DispatcherTimer
ViewModel
Slider перемещается
|
V
обновляются данные ViewModel
|
V
отрисовка контрола в code behind
同时,对滑块移动的反应看起来有些生涩。即使计时器启动也没有任何延迟。我开始想办法,添加了一个状态栏,我开始在其中写各种统计数据。事实证明,计算在不到1ms的时间内完成,并在code behind
5ms内控制渲染。同时,对计算本身的调用发生的频率是渲染的 10 倍。如果减少计时器延迟,渲染与计算的比率会变得更好一些,但也好不了多少。要么计时器本身也有某种延迟,要么我仍然不明白一些事情。
那么,问题:
- 也许还有其他方法可以
ScottPlot.WPF
在code behind
没有计时器参与的情况下启动控制更新?ViewModel
如何从向发送信号code behind
? - 或者我可以以某种方式
DispatcherTimer
修复/更换它,以便它更频繁地工作吗?code behind
但是,对于整个应用程序来说,不停地不断检查某些标志是否有好处?在存在各种绑定的时代,它似乎是专门为此而设计的。 - 要么我完全误解了整个概念,我需要以完全不同的方式做每件事。也许有一些正确代码的例子,它以图形方式绘制一些东西,实时
WPF
反应或其他类似的控制而没有延迟?Slider
当然,如果这个控件对 是友好的WPF
,那么就可以将它绑定到 中的字段上ViewModel
,并且它会立即显示。不幸的是ScottPlot.WPF
,这是不可能的;文档中明确指出这是一个有意识的决定。我们画得很快,但我们对广泛的功能感到不舒服WPF
。
还有一个选项是XAML
挂起Image
,ViewModel
通过函数ScottPlot
进行渲染bmp
,然后将完成的图像替换到这个中Image
,我已经做了另一个像这样的控件。但随后缩放和滚动图表的功能ScottPlot.WPF
就会丢失。也许我不需要这些功能,但我还不想完全进入这个选项。
是的,当然您也可以将它们附加到code behind
滑块事件处理程序并在那里进行所有重新计算,然后进行渲染。但不知怎的,除非绝对必要,否则我不想将绑定完全降到如此低的水平。