![]() |
Модераторы: gambit, Kefir, Partizan |
![]() ![]() ![]() |
|
Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
Допустим у меня есть Image забинден к ViewModel
Как мне прикрепить анимацию к изменению данных в Bitmap? Повесить анимацию ни на DataContextChanged ни на SourceUpdate не получается ![]() Это сообщение отредактировал(а) Rohoss - 9.5.2011, 11:04 |
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Не совсем понял, что тебе требуется. У тебя меняется битмап и что-то нужно анимировать. Можно подробнее?
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
||||
|
||||
Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
Вот например анимация
Тут анимация повешена на событие MouseLeftButtonDown, а мне нужно как то повесить DataContextChanged или SourceUpdate или что-то в этом роде. В общем задача вызвать анимацию при изменении данных, которые биндятся к Image |
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Что-то сходу без кодбехинда у меня тоже ничего не получилось. Через кодбехинд скорее всего получится.
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
Rohoss |
|
||||||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
Через кодбехинд не сложно. Обработал событие DataContextChanged, на него повесил обработчик
а уже непосредственно в Test создаём анимацию
Всё работает нормально, вот только меня смущает что в кодбехинд приходится к ViewModel обращаться ![]() Это вообще нормальная практика? Добавлено через 2 минуты и 57 секунд Да и анимация в коде... Если бы была какой-то сложной то ещё понятно, а так довольно простая, такую ИМХО лучше в ХАМЛ. Только вот не знаю как потом её можно подтянуть. Разместить её можно только в стиле, а если она там, то уже привязана к какому-то обработчику... |
||||||
|
|||||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Да, представление имеет право знать и работать с ViewModel как ей хочется, лишь бы логику не реализовывало. Щас накатаю то же самое, только в другом оформлении. По идее должно сгодиться. -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
-Mikle- |
|
||||||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Значит так, где-нить создаем класс с атачед-проперти следующего содержания:
Далее импортим неймспейс в XAML и можем использовать таким образом:
ну или так:
Вроде так будет удобно и можно в стилях все делать без проблем. -------------------- Если тебе плюют в спину, значит ты впереди... |
||||||
|
|||||||
Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
-Mikle-, спасибо, действительно хорошее решение
![]() |
|||
|
||||
Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
Однако этот вариант не годится, если мы отслеживаем изменение в нашей, и на это изменении вешаем анимацию. У нас ведь в ViewModel нет DependencyProperty, да и заводить их там не правильно. А смысл отслеживать изменения не в самом контроле а в ViewModel, и на них вешать анимацию есть. Вот например, у нас текстбокс биндится к полю в ViewModel. Мы отлавливаем изменении текста для анимации. Если мы вешаем анимацию на TextСhanged, то при вводе текста мы получим много проблем. Анимация нам может даже не дать его нормально набрать, а вот если отслеживаем изменение в ViewModel, может быть совершенно другая история...
|
|||
|
||||
-Mikle- |
|
||||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Верно, нет и не надо.
Если честно, я вот прям не понял разницы. Особенно если речь идет об ImageSource. Если повешать анимацию на изменение данных, а затем у Binding выставить свойство UpdateSourceTrigger=PropertyChanged, то получим точно такую же историю как и с TextChanged. Конкретно в этом случае, правильно было бы вешаться на LostFocus. Вообще, я считаю, анимация это дело представления, а значит в первую очередь стараться подходить со стороны представления, а уже потом, со стороны всего остального. Другое дело, если анимация на Image должна запускаться не при изменении чего-то из Image, а при изменении значения какого-то вообще другого свойства модели представления, тогда да. В последнем случае, конечно же, мы не в состоянии отследить эти данные и их нужно выносить на конкретный уровень. В общем, опять зависит все от задачи. Попытка ввести строгие правила в отношении этого, приведет в итоге к плохозакодированному коду (плохозамасленное масло ![]() Добавлено через 5 минут и 29 секунд Кстати, в примере который я приводил выше, все можно было бы сделать еще красивее, если сделать присоединенное событие, которое бы называлось ImageSourceChanged. Тогда все можно было бы делать через триггер так, как будто это событие является родным для Image. -------------------- Если тебе плюют в спину, значит ты впереди... |
||||
|
|||||
Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
Ну тут с вами сложно не согласится ![]() Ну если так то да, а если у нас есть кнопка сохранить, тогда нет А вообще если у нас есть целая группа контролов привязанных к ViewModel. Можно в таком случае отслеживать изменения какого то одного контрола и анимировать все. Но что если данные контрола не изменятся, значение свойств будут совпадать. То есть, с нашей группы контролов, при изменении в ViewModel, значения свойства не изменится из за совпадения, тогда анимация не выполнится во всей группе, хотя во всех контролов значение изменится. Добавлено через 6 минут и 25 секунд Угу, у меня тоже такая идея вначале была - но я не знал как реализовать... И похоже всё получилось бы очень сложно и много было бы кода ![]() |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |