2016-05-23 3 views
21

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

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

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

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

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

Связь с моей Цитата: MSDN

Так что мой вопрос:

Какая разница в использовании привязок или х: Bind в UWP?

+2

Возможно, самое значительное отличие (как указано в расширении разметки [{x: Bind}] (https://msdn.microsoft.com/en-us/windows/uwp/xaml-platform/x-bind- markup-extension)): * «Скомпилированные привязки строго типизированы и будут разрешать тип каждого шага в пути. Если возвращаемый тип не имеет члена, ** он завершится неудачно во время компиляции **. * * – IInspectable

ответ

27

Следующая, вероятно, не является полным, но некоторые из основных различий

  • Старый стиль {Binding }

    • связывается с DataContext
    • связывается с именем свойства, гибкая о фактический тип источника


  • Новый стиль {x:Bind }
    • связывается каркасный элемент (код-за классом)
    • потребностей всех типов фиксированной во время компиляции
    • по умолчанию былым режим более экономной

И starting with build 14393, {x:Bind } поддерживает:

  • прямое BooleanToVisibility связывание без ValueConverter
  • расширил функции связывания
  • литья
  • словарь шагового

Поздние {х: Bind} является немного быстрее во время выполнения, но так же важно, что он даст ошибки компилятора для ошибочных привязок. С {Binding} вы просто видите пустой Control в большинстве случаев.

6

{x:Bind} выполняет специальный код, который он генерирует во время компиляции. {Binding} использует осмотр объекта общего назначения. Следовательно, {x:Bind} обладает отличной производительностью и обеспечивает проверку ваших выражений привязки во время компиляции. Он поддерживает отладку, позволяя вам устанавливать точки останова в файлах кода, которые генерируются как частичный класс для вашей страницы.

Поскольку {x:Bind} использует сгенерированный код для достижения своих преимуществ, он требует информации о типе во время компиляции. Это означает, что вы не можете привязываться к свойствам, где вы не знаете тип раньше времени. Из-за этого вы не можете использовать {x:Bind} с свойством DataContext, который имеет тип Object, а также может быть изменен во время выполнения. Расширение разметки {x:Bind} - новое для Windows 10 - это альтернатива {Binding}. {x:Bind} не хватает некоторых функций {Binding}, но он работает меньше времени и меньше памяти, чем {Binding} и поддерживает лучшую отладку.

+2

Не могли бы вы добавить источник, который вы цитируете, пожалуйста? –

Смежные вопросы