Подтвердить что ты не робот

Разница между привязкой и x: Bind

Что использовать в UWP, Binding или x:Bind и в чем разница между ними?

Потому что я вижу много сообщений, в которых люди используют Binding, и я только привязываюсь к x:Bind в UWP.

На домашней странице MSDN говорится только, что "объекты привязки, созданные {x:Bind} и {Binding}, в основном функционально эквивалентны". и x:Bind быстрее .

Но в чем разница между ними?

Потому что "в основном функционально эквивалентный" не означает эквивалент.

Ссылка с моей цитаты: MSDN

Итак, мой вопрос:

В чем разница в использовании привязки или x: привязка к UWP?

4b9b3361

Ответ 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} и поддерживает лучшую отладку.