Как стать автором
Обновить

Комментарии 5

> Тут есть один небольшой хак… internal свойство… но думаю написать изменение свойства объекта через отражение (reflection)…
Еще одна скверная идея. Раз в тэгах SL, то вот к чему это может привести, не говоря уже о производительности.
Будет смешана тяжелая операция актуализации ItemsSource с достаточно тяжелой рефлексией. А ВЕДЬ, кажется, НИЧЕГО ЭТОГО НЕ НУЖНО.

Объясните мне, пожалуйста зачем такие сложности?
Я же написал, что мне это тоже не очень нравится, хотя это работает. Если есть реальные предложения, как сделать это без хаков — напишите, ради продуктивной дискуссии я, в общем-то, и написал эту статью.

>> А ВЕДЬ, кажется, НИЧЕГО ЭТОГО НЕ НУЖНО.
А что нужно? Вы знаете более простой способ перехватить изменение контента у ContentControl'а и ItemsSource у Selector'а?

>> Объясните мне, пожалуйста зачем такие сложности?
Как бы в статье объясняется зачем. Что именно непонятно?
> Вы знаете более простой способ перехватить изменение контента у ContentControl'а и ItemsSource у Selector'а?
Как раз это и не нужно при использовании паттерна MVVM. На вьюхе лежит ListBox, ItemsSource которого привязан к коллекции во ViewModel. Именно во ViewModel и должна лежать логика «что-когда-откуда». Вы же перетаскиваете логику во вьюху.
ViewModel рулит всеми транзакциями, она же переключает флаг IsBusy. К этому флагу привязывайте что хотите на вьюхе.
Я вижу как минимум два варианта:
1) Использование ControlTemplate/Style с триггерами, по которым показывать/скрывать IsBusy адорнер
2) Создание отдельного BusyAdorner, который подкладывается контролу в его AdornerLayer

Можно отдельный пост на это написать… было б время.
Всё это требует отдельной разработки для каждой View и ViewMode, и если форм много — это займёт много времени на копипаст. Я же хотел свести время добавления BusyIndicator'ов к минимуму, затрагивая по возможности только один слой — View.
> Всё это требует отдельной разработки для каждой View и ViewMode, и если форм много — это займёт много времени на копипаст.
1) ООП, бро! Вспоминаем о наследовании
или
2.1) Если у форм совершенно разная логика — то несколько ViewModel'ей + DataTemplate + на ContentControl навешивать индикатор занятости
2.2) Логика схожая — одна ViewModel + DataTemplate +…

Если не лениться и сделать как Best Practices советую, то добавочное время имплементации очень быстро окупится. А изложенная в статье минимизация очень легко превратится в «Pain in Da S» для самого автора и для членов команды.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории