|
Как Binding преобразует значения из разных типов?
|
|||
---|---|---|---|
#18+
Похожей информации много, но я не могу найти именно то, что мне нужно. Или я не туда смотрю ... Я пытаюсь понять, как Binding преобразует значения разных типов без использования конвертера. И единственное универсальное решение, которое я нашел, - это промежуточное преобразование в строку. Скажем, есть DependentcyProperty типа double. Мы можем привязать его к свойству типа Int32, и такая привязка будет работать правильно. Как я могу сделать то же самое в коде, не вызывая исключения? Использует ли привязка промежуточное преобразование в строку? Демо-код: Код: c# 1. 2. 3. 4. 5. 6. 7.
Текущие реализации метода, но мне они очень не нравится: Код: c# 1. 2. 3. 4. 5. 6. 7.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Также существует вариант создания скрытого DependecyProperty и использования его для преобразования. Но наследование от DependcyObject только ради механизма преобразования кажется мне плохой идеей. Я еще раз уточню. Я знаю разные способы преобразования значений. Моя задача относится только к WPF. Поэтому меня интересует не какой-либо метод, а именно тот, который используют привязки свойств зависимости. В исходниках я не смог найти, где и как конвертируются значения при привязках. Поэтому прошу либо объяснить этот механизм, либо дать ссылку на исходный код, используемый привязками. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2020, 08:14 |
|
Как Binding преобразует значения из разных типов?
|
|||
---|---|---|---|
#18+
создаешь конвертор, ставишь точку остановки в методе Convert, открываешь окно "Call Stack", смотришь как это устроена. всё же просто ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2020, 13:29 |
|
Как Binding преобразует значения из разных типов?
|
|||
---|---|---|---|
#18+
Roman Mejtes, мне же в Binding надо залезть! Где там точку останова поставить? Сам биндинг - это просто MarkupExtension. Вся "работа" по конвертации спрятана внутри DependecyObject (наверное). Но где именно я не смог разобраться. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2020, 16:20 |
|
Как Binding преобразует значения из разных типов?
|
|||
---|---|---|---|
#18+
Eld Hasp, Есть такие типы BindingOperations и BindingExpression, именно там реализована логика работы связывания, а Binding это просто расширение разметки и не более. вот в этом месте, видно, как применяется конвертер пользовательский и конвертер по умолчанию, если честно, то мне крайне лень вникать в тонкости реализации, так как не возникало такой необходимости и вряд ли возникнет. https://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Data/BindingExpression.cs,43c3ed4a53141207,references ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2020, 17:05 |
|
Как Binding преобразует значения из разных типов?
|
|||
---|---|---|---|
#18+
Roman Mejtes, да - похоже это именно, то что я искал. Буду пытаться разобраться. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2020, 19:15 |
|
Как Binding преобразует значения из разных типов?
|
|||
---|---|---|---|
#18+
Дефолтный конфертер используется, если он нужен, его можно создать, и нет пользовательского. Вот тут дефолтный конвертер создается: https://referencesource.microsoft.com/#PresentationFramework/src/Framework/MS/Internal/Data/DefaultValueConverter.cs,63 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2020, 20:11 |
|
Как Binding преобразует значения из разных типов?
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, там все типы конвертеров Intenal, к сожалению. Надо или скопировать их, или ещё что придумать. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2020, 20:31 |
|
Как Binding преобразует значения из разных типов?
|
|||
---|---|---|---|
#18+
Eld Hasp Сон Веры Павловны, там все типы конвертеров Intenal, к сожалению. Надо или скопировать их, или ещё что придумать. Зачем? Они же создаются автоматически. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2020, 06:04 |
|
Как Binding преобразует значения из разных типов?
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, мне же во внешнем коде надо сделать полностью идентичную конвертацию значения из одного типа в другой. Или как-то по иному можно решить эту задачу? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2020, 17:04 |
|
Как Binding преобразует значения из разных типов?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2020, 19:40 |
|
|
Start [/forum/topic.php?fid=21&gotonew=1&tid=1440264]: |
0ms |
get settings: |
24ms |
get forum list: |
25ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
16ms |
get first new msg: |
9ms |
get forum data: |
2ms |
get page messages: |
275ms |
get tp. blocked users: |
1ms |
others: | 320ms |
total: | 713ms |
0 / 0 |