WPF Binding: Что означает {Binding}?

Автор оригинала: Beatriz Costa
  • Перевод
Этой первой статьей я бы хотел начать цикл переводов постов с замечательного блога, в котором Beatriz Costa детально объясняет определенные аспекты Binding'а в WPF. В первом посте затрагивается тема использования Binding'а без указания каких-либо дополнительных свойств.

В основном, Binding'и, которые вы видите в различных примерах, имеют определенные значения свойств Source и Path. Свойство Source определяет объект, на который направляется Binding, а свойство Path определяет свойство у объекта, значение которого вам нужно. Я видела некоторых людей, которых cбивала с толку их первая встреча с пустым Binding'ом — "{Binding}". На первый взгляд кажется, что мы не дали Binding'у нужной информации, чтобы он делал хоть что-нибудь полезное. Но это не так и я объясню почему. Если вы читали мои предыдущие посты, то вы должны понимать, что не обязательно устанавливать свойство Source у Binding'а, так как есть DataContext, объявленный где-то выше по дереву объектов. Так, когда вы хотите указать на весь объект, а не только на какое-то одно его свойство, вы должны опустить свойство Path.

Первый подход, это когда источником выступает строка и вы просто хотите указать на всю строку целиком (а, к примеру, не на ее свойство Length).
  1. <Window.Resources>
  2.   <system:String x:Key=”helloString>Hello</system:String>
  3. </Window.Resources>
  4.  
  5. <Border DataContext=”{StaticResource helloString}”>
  6.   <TextBlock TextContent=”{Binding}”/>
  7. </Border>
* This source code was highlighted with Source Code Highlighter.

Другой стандартный подход, это когда вы хотите связать элемент с объектом, у которого есть несколько свойств.
  1. <Window.Resources>
  2.   <local:GreekGod Name=”ZeusDescription=”Supreme God of the OlympiansRomanName=”Jupiterx:Key=”zeus/>
  3. </Window.Resources>
  4.  
  5. <Border DataContext=”{StaticResource zeus}”>
  6.   <ContentControl Content=”{Binding}”/>
  7. </Border>
* This source code was highlighted with Source Code Highlighter.

В этой ситуации, ContentControl не знает, как следует отображать данные класса GreekGod. Поэтому, вы всего лишь увидите результат вызова метода ToString(), что обычно немного не то, что нужно. Вместо этого, вы можете использовать DataTemplate, который позволяет вам определять представление ваших данных.
  1. <Window.Resources>
  2.   <local:GreekGod Name=”ZeusDescription=”Supreme God of the OlympiansRomanName=”Jupiterx:Key=”zeus/>
  3.   <DataTemplate x:Key=”contentTemplate>
  4.     <DockPanel>
  5.       <TextBlock Foreground=”RoyalBlueTextContent=”{Binding Path=Name}” />
  6.       <TextBlock TextContent=”:Margin=”0,0,5,0/>
  7.       <TextBlock Foreground=”SilverTextContent=”{Binding Path=Description}” />
  8.     </DockPanel>
  9.   </DataTemplate>
  10. </Window.Resources>
  11.  
  12. <Border DataContext=”{StaticResource zeus}”>
  13.   <ContentControl Content=”{Binding}” ContentTemplate=”{StaticResource contentTemplate}”/>
  14. </Border>
* This source code was highlighted with Source Code Highlighter.

Заметьте, что у Binding'а внутри DataTemplat'а не определено свойство Source. Это из-за того, что DataContext автоматически устанавливается как Source.


Здесь вы можете найти проект для Visual Studio с кодом, который был использован в статье.

От переводчика:
Автор оригинальной статьи — женщина, поэтому текст перевода написан от женского лица.
Так же хотелось бы узнать, насколько интересна тема Binding'а хабролюдям, и стоит ли продолжать эту серию переводов.
Идея перевода навеяна постом WPF Series: Intro aka Введение.
Поделиться публикацией

Похожие публикации

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 14

    –11
    Беа Коста, как все просто.



    А качество воспроизведения шрифтов в WPF — говно, в чем в очередной раз можно убедится на вышеприведенном скриншоте.

      +1
      Весьма опрометчиво замечено xD… в WPF есть множество различных настроек растеризации шрифтов. В частности легко можно добиться знакомой виндовой картинки.

      Такое впечатление создается из-за привычки. Мы привыкли к определенному способу растеризации, и не воспринимаем ничего отличного. Я сам с начала выражал свое фе по этому поводу. xD
        +2
        не-не-не-не-не…
        на форумах MSDN есть масса жалоб на качество шрифтов. да и при работе с мелкими шрифтами иногда удобнее/хочется использовать «пиксельные» шрифты которые в WPF все равно «плывут» в отличе от flash :(
        настраивать сглаживание тюнингом ClearType может себе позволить разработчик, но не обычный юзер — как следствие у юзера все может выглядеть крайне хреново :(

        кстати, в MS и сами прекрасно осознают что сглаживание в WPF далеко от идеала, но по идеологическим причинам не могут пока ее переделать (есть ньюансы с масштабированием и рендерингом контроль над которыми сейчас недоступен на уровне приложения)
      +5
      Так же хотелось бы узнать, насколько интересна тема Binding'а хабролюдям, и стоит ли продолжать эту серию переводов.

      конечно интересна, жду новых переводов
        0
        Спасибо! Будет!
        +2
        Смело переводите дальше, у вас хорошо получается.
        Еще, лично мне, хотелось бы иногда слышать комментарии переводчика между строк текста. Некоторые вещи даже в переводе остаются непонятными.
          +1
          Хорошо, буду разбавлять своими комментариями.
          +1
          Спасибо за статью!
            +1
            Спасибо! Интересно.
              +1
              Продолжайте переводы и не обращайте внимания на тех, кто будет отговаривать. Данная тема слабо раскрыта в рунете, и чем больше будет качественных переводов зарубежных материалов, тем лучше.
              Удачи вам в вашем начинании! :)
                0
                Всё просто здорово, но вот куда в выражении WPF Data Binding пропало слово Data?
                  +1
                  Привязки бывают не только к данным но и к объектам. В данном случае это иммено так: идет привязка к объекту, а не к собственно данным.
                  0
                  Переводите дальше,
                  интереснее всего конечно, биндинг к контекстам L2S и EF.
                    0
                    Жду переводов дальнейших…

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                    Самое читаемое