Как я могу предотвратить мерцание в представлениях Silverlight? - PullRequest
3 голосов
/ 26 января 2011

В моем пользовательском интерфейсе Silverlight есть довольно распространенная ситуация, когда видимость различных элементов привязана к какому-либо свойству ViewModel.Например, у меня может быть такой элемент управления:

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

Если состояние предупреждения истинно, мы хотим показать элемент управления, если нет, то нет.Проблема в том, что у меня много ситуаций, когда страница отображает и отображает все содержимое, включая элемент управления WarningView, а затем секунду спустя скрывает представление, которое выглядит действительно неуклюжим.

Я думаю, что происходит то, что View загружается и выполняет асинхронный вызов на сервер для получения данных, но пока этого не произойдет, DataContext и, следовательно, ничего не будет привязано к WarningView и использует значения по умолчанию,и по умолчанию показывается элемент управления.

Представляется, что для представления лучше всего создавать свою собственную модель представления, или, по крайней мере, это то, что я делаю сейчас.А поскольку вызов асинхронный, всегда может быть некоторый интервал, когда вы хотите что-то показать, но у вас пока нет реальных данных для показа.Я мог бы вообразить создание фиктивной ViewModel с лучшими значениями по умолчанию, но это похоже на большую работу для всего проекта.

Так, как лучше обойти эту проблему?

1 Ответ

5 голосов
/ 22 марта 2011

Ну, задолго до того, как я отказался от этого, я сам наткнулся на ответ: в привязке вы можете указать FallbackValue и / или TargetNullValue, которые определяют значение, которое нужно использовать, когда то, с чем вы не можете связать быть получен или является нулевым. Моя проблема заключалась в том, что View загружает и создает ViewModel, и на момент между тем, когда View становится видимым и когда привязка завершена, элементы управления становятся видимыми, и затем привязка сворачивает их, и это вызывает мерцание. Установив запасные значения, я могу убедиться, что элементы управления свернуты, а затем включаются только тогда, когда они связаны, и затем они остаются включенными. Без мерцания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...