我在Silverlight UI中遇到了一个相当常见的情况,即各种元素的可见性都绑定到ViewModel上的某个属性。例如,我可能会有这样一个控件:
<myapp:WarningView Visibility="{Binding IsInWarningState}" />
如果警告状态为真,我们希望显示控件,否则不显示。问题是,有很多情况下页面会渲染并显示所有内容,包括 WarningView 控件,然后一秒钟后再隐藏视图,这看起来非常笨拙。
我认为发生的事情是 View 加载并进行异步调用以获取数据,但在此之前,没有 DataContext,因此 WarningView 没有绑定的内容,只能使用默认值,并且默认值是显示控件。
似乎最清晰的方法是视图实例化自己的视图模型,或者至少是我现在正在做的。由于调用是异步的,可能始终存在某个时间间隔,您想要显示某些内容,但尚未有真正的数据可供显示。我可以想象制作一个具有更好默认值的模拟 ViewModel,但这似乎需要在整个项目中进行大量工作。
那么,如何解决这个问题呢?