【发布时间】:2011-01-26 18:17:02
【问题描述】:
我的 Silverlight UI 中有一个相当常见的情况,其中各种元素的可见性绑定到 ViewModel 上的某些属性。例如,我可能有这样的控件:
<myapp:WarningView Visibility="{Binding IsInWarningState}" />
如果警告状态为真,我们想显示控件,如果不是,我们不显示。问题是我有很多情况页面呈现并显示所有内容,包括WarningView 控件,然后一秒钟后隐藏视图,这看起来非常笨拙。
我认为正在发生的事情是 View 加载并对服务器进行异步调用以获取数据,但在此之前,没有 DataContext,因此 WarningView 没有任何东西可以绑定,并且使用默认值和默认值是显示控件。
视图实例化自己的视图模型似乎是最干净的,或者至少我现在正在这样做。而且由于调用是异步的,所以当您想要显示某些内容但您还没有要显示的真实数据时,总会有一些时间间隔。我可以想象制作一个具有更好默认值的模拟 ViewModel,但这似乎需要在整个项目范围内完成很多工作。
那么解决这个问题的最佳方法是什么?
【问题讨论】:
-
IsInWarningState 在您的 VM 中是否默认为 true 或 false?
-
False,这就是控件应该隐藏的原因,并且它在VM加载后隐藏,但在此之前它是可见的,这就是导致闪烁的原因。跨度>
-
为什么要等待 VM 上的异步调用完成?您能否为 IsInWarningState 属性提供一些代码。你是如何将 ViewModel 附加到 View 的?
标签: silverlight mvvm