У меня довольно распространенная ситуация в моем пользовательском интерфейсе Silverlight, где видимость различных элементов связана с каким-то свойством в ViewModel. Например, я могу иметь контроль, как это:Как предотвратить появление мерцания в представлениях Silverlight?
<myapp:WarningView Visibility="{Binding IsInWarningState}" />
Если состояние предупреждения верно, мы хотим показать контроль, если нет, то мы не делаем. Проблема в том, что у меня много ситуаций, когда страница отображает и отображает весь контент, в том числе элемент управления WarningView, а затем второй позже скрывает представление, которое выглядит действительно неуклюжим.
Я думаю, что происходит то, что View загружает и делает асинхронный вызов на сервер для получения данных, но до тех пор, пока это не произойдет, нет никакого DataContext, и поэтому ничего, с помощью которого WarningView не связывается и не использует значения по умолчанию, и default - показать элемент управления.
Похоже, что для просмотра требуется создать экземпляр собственной модели просмотра или, по крайней мере, это то, что я сейчас делаю. А так как вызов асинхронный, всегда может быть некоторый интервал, когда вы хотите что-то показывать, но у вас пока нет реальных данных. Я мог бы представить себе макет ViewModel с лучшими настройками по умолчанию, но это похоже на большую работу по созданию проекта.
Итак, каков наилучший способ решения этой проблемы?
Включает ли IsInWarningState значение true или false в вашей виртуальной машине? –
False, поэтому элемент управления должен быть скрыт, и он * скрыт, когда VM загружается, но до тех пор это видно, что и вызывает мерцание. –
Почему вы ожидаете завершения асинхронного вызова на виртуальной машине? Можете ли вы указать код для свойства IsInWarningState. Как вы прикрепляете ViewModel к представлению? –