如何防止Silverlight视图中的闪烁?

时间:2011-01-26 18:17:03

标签: silverlight mvvm

我的Silverlight UI中有一个相当常见的情况,其中各种元素的可见性绑定到ViewModel上的某些属性。例如,我可能有这样的控件:

<myapp:WarningView Visibility="{Binding IsInWarningState}" />

如果警告状态为真,我们想要显示控件,如果没有,我们不显示。问题是我有很多情况下页面呈现并显示所有内容,包括WarningView控件,然后一秒钟后隐藏视图,看起来非常笨拙。

我认为发生的事情是View加载并对服务器进行异步调用以获取数据,但在此之前,没有DataContext,因此没有任何内容可以绑定到WarningView,并使用默认值和默认值是显示控件。

对于实例化自己的视图模型的视图来说,这似乎是最干净的,或者至少我现在正在做的事情。并且由于调用是异步的,因此当您想要显示某些内容但是您还没有显示真实数据时,总会有一些间隔。我可以想象制作一个具有更好默认值的模拟ViewModel,但这似乎需要在项目范围内做很多工作。

那么解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:5)

好吧,在我放弃这个之后很久,我自己偶然发现了答案:在绑定中你可以指定一个FallbackValue和/或TargetNullValue,它指定一个值,当你绑定的东西不能使用时获得或为空。我的问题是View加载并创建了ViewModel,并且在View可见和绑定完成之间的瞬间,控件是可见的,然后绑定将它们折叠,这会导致闪烁。通过设置Fallback值,我可以确保控件是Collapsed,然后仅在绑定时打开,然后它们保持打开状态。没有闪烁。