Разница между привязкой и x: Bind
Что использовать в UWP, Binding
или x:Bind
и в чем разница между ними?
Потому что я вижу много сообщений, в которых люди используют Binding
, и я только привязываюсь к x:Bind
в UWP.
На домашней странице MSDN говорится только, что "объекты привязки, созданные {x:Bind}
и {Binding}
, в основном функционально эквивалентны". и x:Bind
быстрее .
Но в чем разница между ними?
Потому что "в основном функционально эквивалентный" не означает эквивалент.
Ссылка с моей цитаты: MSDN
Итак, мой вопрос:
В чем разница в использовании привязки или x: привязка к UWP?
Ответы
Ответ 1
Ниже, вероятно, не полно, но некоторые из основных отличий
-
Старый стиль {Binding }
- привязывается к DataContext
- связывается с именем свойства, гибким относительно фактического типа источника
- Новый стиль
{x:Bind }
- привязывается к элементу Framework (класс кода)
- все типы фиксируются во время компиляции
- по умолчанию используется более экономный режим OneTime
И начиная с версии 14393, {x:Bind }
поддерживает:
- прямая привязка BooleanToVisibility без ValueConverter
- расширенная привязка функций
- литье
- словарные индексы
Более новый {x: Bind} работает быстрее во время выполнения, но так же важно, чтобы он дал ошибки компилятора для ошибочных привязок. С {Binding} вы просто видите пустой элемент управления в большинстве случаев.
Ответ 2
{x:Bind}
выполняет специальный код, который он генерирует во время компиляции. {Binding}
использует проверку объектов общего назначения. Следовательно, {x:Bind}
обладает отличной производительностью и обеспечивает проверку результатов привязки во время компиляции. Он поддерживает отладку, позволяя вам устанавливать точки останова в файлах кода, которые генерируются как частичный класс для вашей страницы.
Поскольку {x:Bind}
использует сгенерированный код для достижения своих преимуществ, он требует информации о типе во время компиляции. Это означает, что вы не можете привязываться к свойствам, где вы не знаете тип раньше времени. Из-за этого вы не можете использовать {x:Bind}
с свойством DataContext, который имеет тип Object, а также может быть изменен во время выполнения.
Расширение разметки {x:Bind}
- новое для Windows 10 - альтернатива {Binding}
. {x:Bind}
не хватает некоторых функций {Binding}
, но он работает меньше времени и меньше памяти, чем {Binding}
и поддерживает лучшую отладку.