我在我的 Silverlight UI 中遇到了一个相当普遍的情况,其中各种元素的可见性绑定(bind)到 ViewModel 上的某些属性。例如,我可能有这样的控件:
<myapp:WarningView Visibility="{Binding IsInWarningState}" />
如果警告状态为真,我们要显示控件,否则,我们不显示。问题是我遇到过很多情况,页面呈现并显示所有内容,包括 WarningView 控件,然后一秒钟后隐藏 View ,这看起来非常笨拙。
我认为正在发生的事情是 View 加载并对服务器进行异步调用以获取数据,但在此之前,没有 DataContext,因此 WarningView 无法绑定(bind),并使用默认值和默认值就是显示控件。
对于 View 来说,实例化它自己的 View 模型似乎是最干净的,或者至少这就是我现在正在做的。由于调用是异步的,因此当您想要显示某些内容但还没有要显示的真实数据时,总会有一些时间间隔。我可以想象制作一个具有更好默认值的模拟 ViewModel,但这似乎需要在整个项目范围内完成大量工作。
那么解决这个问题的最佳方法是什么?
最佳答案
好吧,在我放弃这个之后很久,我自己偶然发现了答案:在绑定(bind)中你可以指定一个 FallbackValue 和/或 TargetNullValue,它们指定一个值,当你绑定(bind)的东西不能时使用获得或为空。我的问题是 View 加载并创建了 ViewModel,并且在 View 可见和绑定(bind)完成之间的瞬间,控件可见,然后绑定(bind)折叠它们,这会导致闪烁。通过设置 Fallback 值,我可以确保控件折叠,然后仅在绑定(bind)时打开,然后它们保持打开状态。无闪烁。
关于silverlight - 如何防止 Silverlight View 中的闪烁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4808262/