我有一个应用程序,我使用 WPF Canvas 基于视图模型中的对象列表来显示图元(例如多边形、折线等)。 当我想要更新时,我通过 Children.Clear() 从 Canvas 中删除子项,然后根据数据重新绘制对象(即将新元素添加到 Children 集合中)。清除孩子和绘图之间的短暂时间会导致明显的闪烁。
是否有任何机制可以防止这种情况发生,例如暂时阻止视觉更新?
鱼与熊掌不可兼得。 (维基百科)
您无法冻结图形对象并以某种方式更新它们。因此,必须消除冻结或更新。
更新无法消除,因为正如您已经看到的,不更新意味着删除所有内容并从头开始重新创建所有内容,这会导致闪烁。 (它导致的另一件事,你没有提到,所以你可能没有意识到它,它比更新慢相当慢,所以就在那里你放弃了你认为的任何节省你是因为冷冻而得的。)
所以,失去冷冻。发生更改时,删除不再需要的任何图形图元,更新所有现有图元,然后创建任何新图元。